我正在尝试检查我的文本档案中是否存在字符串,我已经撰写了一个将档案内容转换为字符串的函式。
char*read(FILE*f);
我写的查找字符串的函式是:
int find(FILE* f, char* M){
char*chaine=read(f);
if(strstr(chaine, M)!=0){
printf("\n Word exists");
return 0;
}
printf("\nThe word doesn't exist!!");
return -1;
}
文本档案示例:
当我尝试使用“他”这个词时,它说这个词存在。
uj5u.com热心网友回复:
strstr()
正在查找字符串,He
因为这些字符在Hey
. 您可以尝试使用isalpha()
after 来查看它是否是单词的结尾,或者您是否在另一个单词中找到了匹配项。
下面是一个使用isalpha()
和strlen()
如果找到匹配的示例strstr()
。
char *example = "Hey I am a beginner C learner.";
char *ia_example = "He, I am a beginner C learner.";
char *to_find = "He";
char *match;
if ((match = strstr(example, to_find)) && !isalpha(match[strlen(to_find)])) {
printf("\"%s\" found in example: \"%s\"\n", to_find, example);
}
if ((match = strstr(ia_example, to_find)) && !isalpha(match[strlen(to_find)])) {
printf("\"%s\" found in ia_example: \"%s\"\n", to_find, ia_example);
}
输出:
"He" found in ia_example: "He, I am a beginner C learner."
strlen()
用于获取您要搜索的子字符串的长度(在本例中He
为 length )2
。所以match[strlen(to_find)]
(ie match[2]
) 将是匹配子字符串之后的字符。如果将该字符放入isalpha()
并回传 false,则您知道子字符串匹配后的字符不是任何字符 az 或 AZ。
这将确保您不会像使用"Hey"
. 请注意,此代码示例未考虑检查子字符串是否出现在单词末尾。所以你需要在匹配之前对字符执行类似的检查,看看是否isalpha()
0 评论