比较两个字符串中的单词

时间:2013-10-15 17:49:51

标签: c string

我做了两个字符串。用户可以填写它们。

char text[200];
char text2[200];  

我需要从两个字符串中找到类似的单词。例如,

文字=我一辈子都在这里

Text2 =他们来赢得我们所有人

我需要编程找到类似的字词,例如' here',#39; all'。 我试过这样但是没有发现所有的话。

if(strstr(text,text2) != NULL)

然后是printf,但我认为这不对。

5 个答案:

答案 0 :(得分:5)

我认为这就是你想要的:

char text[] = "I am here for all my life";
char text2[] = "They are here to win us all";

char *word = strtok(text, " ");

while (word != NULL) {
    if (strstr(text2, word)) {
        /* Match found */
        printf("Match: %s\n", word);
    }
    word = strtok(NULL, " ");
}

它使用strtok()逐字逐句地阅读句子,并使用strstr()来搜索另一句中的相应单词。请注意,这不是非常有效,如果您有大量数据,则必须考虑使用更智能的算法。

<强>更新

由于您不想匹配嵌入的单词,strstr()对您没有多大帮助。您必须使用自定义函数,而不是使用strstr()。像这样:

#include <ctype.h>
int searchword(char *text, char *word) {
    int i;

    while (*text != '\0') {
        while (isspace((unsigned char) *text))
            text++;
        for (i = 0; *text == word[i] && *text != '\0'; text++, i++);
        if ((isspace((unsigned char) *text) || *text == '\0') && word[i] == '\0')
            return 1;
        while (!isspace((unsigned char) *text) && *text != '\0')
            text++;
    }

    return 0;
}

其他代码保持不变,但通过调用此新函数替换对strstr()的调用:

char text[] = "I am here for all my life";
char text2[] = "They are here to win us all";

char *word = strtok(text, " ");

while (word != NULL) {
    if (searchword(text2, word)) {
        /* Match found */
        printf("Match: %s\n", word);
    }
    word = strtok(NULL, " ");
}

答案 1 :(得分:1)

您需要结合使用strtok()strstr()

text拆分为包含strtok()的令牌,并使用text2

strstr()中搜索该令牌

安全而不是strtok()您也可以使用strtok_r()

答案 2 :(得分:1)

text分解为单词并使用text2

strstr中搜索这些单词

答案 3 :(得分:0)

我认为有两个主题对你有帮助。

How to extract words from a sentence efficiently in C?

Split string in C every white space.

使用带有空格的strtok作为分隔符似乎是将两个字符串解析为单词的合适解决方案。听起来你已经有效地实施了第二步(strsrt)。

答案 4 :(得分:0)

可能的算法实现:

  • 从用户处获取两个字符串(最好使用char **代替char *
  • 使用qsort
  • 对每个字符串进行排序
  • 从最小的字符串列表的开头开始,然后开始搜索

注意:最后一步可以在O(n)时间

执行