You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 08:58:01