我想写一个获得句子的函数(我称之为resentence)并找到重复的单词,然后删除它们。 例如: 输入
Big happy happy smile
输出
Big happy smile
它显示行中有错误:
if (strstr(temp1, temp) == NULL)
希望有人能找到这笔交易。
void RemoveDuplicates(char *resentence)
{
char *temp1 = malloc(100);
char *temp = NULL;
int len;
len = strlen(resentence);
printf("len:%d", len);
temp = strtok(resentence, " ");
if (temp != NULL && strstr(temp1, temp) == NULL)
strcpy(temp1, temp);
while (temp != NULL)
{
temp = strtok(NULL, " ");
if (strstr(temp1, temp) == NULL)
{
strcat(temp1, " ");
strcat(temp1, temp);
}
}
strcpy(resentence,temp1);
puts(resentence);
free(temp1);
}
答案 0 :(得分:2)
试试这个
void RemoveDuplicates(char *resentence){
char *temp1 = malloc(100);
char *temp = NULL;
*temp1=0;
temp = strtok(resentence, " ");
if (temp != NULL){// && strstr(temp1, temp) == NULL)
strcpy(temp1, temp);
while ((temp = strtok(NULL, " ")) != NULL){
if (strstr(temp1, temp) == NULL){
strcat(temp1, " ");
strcat(temp1, temp);
}
}
}
strcpy(resentence, temp1);
puts(resentence);
free(temp1);
}
答案 1 :(得分:0)
实际上,如果你输入这样的东西:" abc ab"在这段代码中,即使在更正的版本中,它仍然会给出错误的输出,在这种情况下:" abc"(缺少" ab")。这是因为函数" strstr()"作品。它需要两个字符串,让我们假设char * a =" abc"和char * b =" ab",并逐个字符地比较它们。对于字符串a和b,它将如下:1)a = a(ok),2)b = b(ok),此处它停止一次" strstr()"不会比较空终结符字符' \ 0'让我们对平等做出错误的确认。以下是我为此目的而编写的一个小程序,似乎适用于任何给定的输入(至少与我尝试的那些:)),希望它有所帮助。
WEB-INF