如何用C解决这个输出?

时间:2013-11-05 10:21:14

标签: c output

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

例如:

Input: excellent
Output: excellent,excellently

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

我的输出:

excellent,excellently,

它总是给我一个逗号。

Prog:desc 迭代地将字典中的每个单词转换为小写, 并将转换后的单词存储在较低位置。 使用strncmp比较input_str和lower的前两个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");
    }
}

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

我倾向于使用两种方法来处理逗号打印问题:

  1. 在循环开始时,如果i > 0打印逗号。
  2. 最后(打印实际值后),打印逗号i < (n - 1)
  3. 你可以使用其中之一,第一个更简单,因为比较更简单,但它可能稍微不方便,因为它及时移动逗号打印(!)。在每次循环迭代中,您将打印属于上一次迭代的逗号。至少对我来说这感觉如何,但当然这是相当主观的。