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

如何获取文件中匹配关键词所在行的后续文本

匹配关键词后存储剩余文本的解决方案

你的需求是找到匹配关键词后的所有文本并存储,用strtok分割单词的方式太繁琐,还容易丢失文本的整体结构,直接在原行字符串中定位关键词位置是更简单高效的方法。

具体实现步骤

  1. 处理换行符:fgets会把换行符读入line,先去除它避免干扰后续操作。
  2. 定位关键词:用strstr在line中查找key_search的起始地址。
  3. 跳过无关内容:找到匹配后,先移动指针跳过关键词本身,再跳过关键词后面的所有连续空格,定位到目标文本的起始位置。
  4. 存储目标文本:为目标文本分配内存,将起始位置后的字符串复制进去(注意内存管理)。

修改后的代码示例

char *p_match = NULL;
char *target_text = NULL;

while(fgets(line, MAX_LINE_LENGTH, fp_database) != NULL) {
    // 去掉fgets读入的换行符
    line[strcspn(line, "\n")] = '\0';
    
    // 在当前行查找关键词
    p_match = strstr(line, key_search);
    if(p_match != NULL) {
        printf("Match found!");
        // 跳过关键词本身
        p_match += strlen(key_search);
        // 跳过关键词后的所有空格
        while(*p_match == ' ') {
            p_match++;
        }
        // 分配内存存储目标文本,需检查malloc是否成功
        target_text = malloc(strlen(p_match) + 1);
        if(target_text != NULL) {
            strcpy(target_text, p_match);
            // 这里可以使用target_text,比如打印或写入文件
            printf(" Target text: %s\n", target_text);
        }
    }
}

// 使用完毕后释放内存
if(target_text != NULL) {
    free(target_text);
}

方案优势

  • 避免了strtok分割单词导致的字符串碎片化问题,直接保留剩余文本的完整结构。
  • 无需逐个拼接单词,代码更简洁,也不用维护words数组的索引逻辑。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:35:19