7

每次找到子字符串时,我都必须在字符串中搜索子字符串并显示下面给出的完整单词-

例如:

Input: excellent
Output: excellent,excellently

我无法弄清楚如何制作像上面那样的输出。

我的输出:

excellent,excellently,

最后总是给我一个逗号。

prog: desc 迭代地将字典中的每个单词转换为小写,并将转换后的单词存储为小写。使用 strncmp 比较 input_str 的前 len 个字符和更低的字符。如果 strncmp 的返回值为 0,则两个字符串的前 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

在打印第二个单词之前检查您是否已经打印了一个单词:

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

对于逗号打印问题,我倾向于使用两种方法:

  1. 在循环开始时,打印逗号 if i > 0
  2. 最后(在打印实际值之后),打印逗号 if i < (n - 1)

您可以使用其中任何一个,第一个更简单,因为比较更简单,但它可能不太方便,因为它会及时移动逗号打印(!)。在每次循环迭代中,您都在打印属于上一次迭代的逗号。至少这对我来说是什么感觉,但当然这是相当主观的。

于 2013-11-05T10:28:46.550 回答