如何获取文件中匹配关键词所在行的后续文本
匹配关键词后存储剩余文本的解决方案
你的需求是找到匹配关键词后的所有文本并存储,用strtok分割单词的方式太繁琐,还容易丢失文本的整体结构,直接在原行字符串中定位关键词位置是更简单高效的方法。
具体实现步骤
- 处理换行符:
fgets会把换行符读入line,先去除它避免干扰后续操作。 - 定位关键词:用
strstr在line中查找key_search的起始地址。 - 跳过无关内容:找到匹配后,先移动指针跳过关键词本身,再跳过关键词后面的所有连续空格,定位到目标文本的起始位置。
- 存储目标文本:为目标文本分配内存,将起始位置后的字符串复制进去(注意内存管理)。
修改后的代码示例
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
相关产品推荐
相关产品推荐

