我必须搜索字符串中的子字符串&每次找到子串时都会显示下面给出的完整单词 -
例如:
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");
}
}
答案 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)
我倾向于使用两种方法来处理逗号打印问题:
i > 0
打印逗号。i < (n - 1)
。你可以使用其中之一,第一个更简单,因为比较更简单,但它可能稍微不方便,因为它及时移动逗号打印(!)。在每次循环迭代中,您将打印属于上一次迭代的逗号。至少对我来说这感觉如何,但当然这是相当主观的。