7

文字列内の部分文字列を検索し、部分文字列が見つかるたびに、以下のように完全な単語を表示する必要があります-

例えば:

Input: excellent
Output: excellent,excellently

上記のような出力を作成する方法がわかりません。

私の出力:

excellent,excellently,

最後に常にコンマが表示されます。

Prog: desc 辞書内のすべての単語を繰り返し小文字に変換し、変換された単語を小文字に格納します。strncmp を使用して、input_str 以下の最初の len 文字を比較します。strncmp の戻り値が 0 の場合、2 つの文字列の最初の len 文字は同じです。

void complete(char *input_str)
{
    int len = strlen(input_str);
    int i, j, found;
    char lower[30];
    found = 0;

    for(i=0;i<n_words;i++)
    {
        for(j=0;j<strlen(dictionary[i]);j++)
        {
          lower[j] = tolower(dictionary[i][j]);

        }
        lower[j+1]='\0';
        found=strncmp(input_str,lower,len);

        if(found==0)//found the string n print out
        {
           printf("%s",dictionary[i]);
           printf(",");
        }
    }

    if (!found) {
        printf("None.\n");
    } else {
        printf("\n");
    }
}
4

2 に答える 2

2

2 番目の単語を印刷する前に、既に単語を印刷しているかどうかを確認します。

char printed = 0;
for (i=0; i < n_words; i++)
{
    for(j = 0; j < strlen(dictionary[i]); j++)
      lower[j] = tolower(dictionary[i][j]);
    lower[j + 1] = '\0';
    found = strncmp(input_str, lower, len);

    if (found == 0)//found the string n print out
    {
       if (printed)
         printf(",");
       printf("%s", dictionary[i]);
       printed = 1;
    }
}
于 2013-11-05T10:30:28.613 に答える
0

コンマ印刷の問題に対して私が使用する傾向がある 2 つのアプローチがあります。

  1. ループの開始時に、コンマ if を出力しi > 0ます。
  2. 最後に (実際の値を出力した後)、コンマ if を出力しi < (n - 1)ます。

どちらも使用できます。比較が簡単なため、最初のほうが簡単ですが、コンマ印刷を時間内に移動するため、少し不便になる可能性があります (!)。ループの反復ごとに、前の反復に属するカンマを出力しています。少なくとも私はそう感じていますが、もちろん主観的なものです。

于 2013-11-05T10:28:46.550 に答える