删除c程序中字符串中的重复单词

时间:2015-01-12 18:28:43

标签: c string duplicates

我想写一个获得句子的函数(我称之为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);
}

2 个答案:

答案 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