我做了两个字符串。用户可以填写它们。
char text[200];
char text2[200];
我需要从两个字符串中找到类似的单词。例如,
文字=我一辈子都在这里
Text2 =他们来赢得我们所有人
我需要编程找到类似的字词,例如' here',#39; all'。 我试过这样但是没有发现所有的话。
if(strstr(text,text2) != NULL)
然后是printf,但我认为这不对。
答案 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 *
)注意:最后一步可以在O(n)
时间