尝试在文本文件中查找字符串时我在 C 中的函数出现问题
Problem with my function in C when trying to find a string in a text file
我正在尝试检查文本文件中是否存在字符串,我已经编写了一个将文件内容转换为字符串的函数。
char*read(FILE*f);
我写的查找String的函数是:
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;
}
文本文件示例:
Hey I am a beginner C learner.
当我尝试使用 “他”这个词时,它说这个词存在。
strstr()
正在查找字符串 He
,因为这些字符在 Hey
中找到。您可以尝试在后面的字符上使用 isalpha()
来查看它是否是单词的结尾,或者您是否在另一个单词中找到了匹配项。
这里是一个使用 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
),长度为 2
。所以match[strlen(to_find)]
(即match[2]
)将是匹配子串之后的字符。如果将该字符放入 isalpha()
并且它 returns 为假,那么您知道子字符串匹配后的字符不是任何字符 a-z 或 A-Z。
这将确保您不会像 "Hey"
那样在单词中间找到匹配项。请注意,此代码示例没有考虑检查子字符串是否出现在单词的末尾。所以你需要在比赛前对角色进行类似的检查,看看 isalpha()
我正在尝试检查文本文件中是否存在字符串,我已经编写了一个将文件内容转换为字符串的函数。
char*read(FILE*f);
我写的查找String的函数是:
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;
}
文本文件示例:
Hey I am a beginner C learner.
当我尝试使用 “他”这个词时,它说这个词存在。
strstr()
正在查找字符串 He
,因为这些字符在 Hey
中找到。您可以尝试在后面的字符上使用 isalpha()
来查看它是否是单词的结尾,或者您是否在另一个单词中找到了匹配项。
这里是一个使用 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
),长度为 2
。所以match[strlen(to_find)]
(即match[2]
)将是匹配子串之后的字符。如果将该字符放入 isalpha()
并且它 returns 为假,那么您知道子字符串匹配后的字符不是任何字符 a-z 或 A-Z。
这将确保您不会像 "Hey"
那样在单词中间找到匹配项。请注意,此代码示例没有考虑检查子字符串是否出现在单词的末尾。所以你需要在比赛前对角色进行类似的检查,看看 isalpha()