在C语言中如何检查字符串是否包含指定关键词?
在C语言中如何检查字符串是否包含指定关键词?
嗨,看来你从Python转C的时候遇到了字符串处理的小坎儿,别担心,咱们一步步把问题解决掉!
首先得纠正你输入部分的问题:你原来用的scanf("%c", str);只能读取单个字符,这肯定没法拿到用户输入的完整句子呀。推荐你用fgets来读取输入,它能捕获包含空格的整行内容,还能更安全地避免缓冲区溢出的问题。
然后说说你提到的strstr函数——其实它就是C里用来判断子串是否存在的工具,只是你可能搞反了参数顺序!strstr的正确用法是strstr(主字符串, 要查找的子串):如果找到子串,它会返回子串在主字符串里的起始地址(非NULL值);如果没找到,就返回NULL,这效果就和Python里的"good" in str完全对应上了。
另外你提到用switch尝试,这个思路行不通哦——switch只能处理整数、字符这类常量值,没法直接用来匹配字符串或者子串,直接放弃这个方向就好啦。
给你写个完整的示例代码,照着这个来就能实现你的需求:
#include <stdio.h> #include <string.h> // 必须包含这个头文件才能使用strstr、strcspn这些字符串函数 int main() { char str[100]; // 把数组开得大一点,避免输入内容太长导致溢出 printf("How are you feeling right now? "); // 用fgets读取整行输入,sizeof(str)确保不会超出数组容量 fgets(str, sizeof(str), stdin); // 去掉fgets读进来的换行符(如果存在),避免影响后续判断 str[strcspn(str, "\n")] = '\0'; // 检查是否包含"good" if (strstr(str, "good") != NULL) { printf("I'm glad to hear that\n"); } // 检查是否包含"tired" else if (strstr(str, "tired") != NULL) { printf("Don't worry, today will end soon and you'll get to bed and sleep well.\n"); } // 处理其他情况 else { printf("Hmm, tell me more about how you feel!\n"); } return 0; }
再补充几个小细节:
- 数组大小尽量给足,比如上面用了100字节,避免用户输入过长导致缓冲区溢出;
fgets会把用户按下的回车键(换行符)也读进字符串里,所以用strcspn来找到换行符的位置,把它替换成字符串结束符'\0',这样后续判断就不会受影响;strstr是区分大小写的,如果需要忽略大小写的匹配,你得自己写个遍历比较的函数,或者用一些扩展库的函数,但一般你的需求里大小写敏感就够用啦。
备注:内容来源于stack exchange,提问作者Tom Dan Harel
相关产品推荐
相关产品推荐

