3

フィルタリングする配列があります。

例:

str = "hellothere"およびfilter = "eo"。フィルタリングが必要な場合はどうすればよいですか?

void filter_str(char* str, char* filter, char*result)
{
  while(*str)
  {
       if() //If the current character in str is one to be filter. 
        {
                 *str++;
        }
        else
        {
                *result++ = *str++;
        }

 } 
 *result = '\0';
}

現在の文字がフィルターが必要な文字であるかどうかを確認する方法がわかりません。フィルタは「eo」などの複数の文字にすることができるため。ループごとに「e」と「o」の両方をチェックし、最初にフィルターを「e」にリセットするにはどうすればよいですか。

フィルタの先頭へのポインタを作成し、しばらくしてからそれを使用してフィルタの先頭に戻りたいと思いました。しかし、フィルタリングするすべての文字に対して*strをチェックする方法がわかりません。

4

2 に答える 2

1

この場合、面倒な作業を行う関数が既に作成されています。

if (strchr(filter, *str))

一般的に、これは処理が複雑すぎて処理できない場合の質問に対する回答です。「内側」の問題を解決する関数を作成し、その関数を「外側」の問題で使用します。この場合、内部の問題は文字列内の文字を見つけることであり、外部の問題は実行しているフィルタリング操作です。内なる問題がすでに解決されていることは幸運です。

于 2012-10-23T06:31:42.570 に答える
0

文字が に含まれているかどうかを知りたい場合、filter(STL 関数を使用しない) "簡単な" 方法は、 の要素をループして、filter探している文字が見つかるかどうかを確認することです。

while(*str)
{
    bool found = false;
    // For each element in filter {
        // If *str == element {
            found = true;
            break; // This function gets you out of the 'for' loop
        }
    }

    if(found) //If the current character in str is one to be filter. 
    {

コメントで擬似コードを埋めることができます

于 2012-10-23T06:36:28.590 に答える