拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 尝试在文本档案中查找字符串时,我的C函式出现问题

尝试在文本档案中查找字符串时,我的C函式出现问题

白鹭 - 2022-01-25 2141 0 0

我正在尝试检查我的文本档案中是否存在字符串,我已经撰写了一个将档案内容转换为字符串的函式。

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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *