我做了两根弦。用户可以同时填写它们。
char text[200];
char text2[200];
我需要从两个字符串中找到相似的单词。例如,
文字=我一生都在这里
Text2= 他们来这里是为了赢得我们所有人
我需要编程找到类似的词,如“这里”、“全部”。我试过这样,但没有找到所有单词。
if(strstr(text,text2) != NULL)
然后 printf 但我认为这不是正确的事情。
我认为这就是你想要的:
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()
因此对您没有太大帮助。而不是 using 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, " ");
}
您需要使用strtok()
和的组合strstr()
。
拆分text
为令牌并在其中strtok()
搜索该令牌text2
strstr()
为了安全而不是strtok()
你也可以使用strtok_r()
分解成单词并在使用text
中搜索这些单词text2
strstr
我认为有两个线程会对您有所帮助。
使用带有空格的strtok作为分隔符似乎是将两个字符串解析为单词的一种合适的解决方案。听起来您已经有效地实施了第二步(strsrt)。