1. 题目背景与需求分析
这道来自天梯赛L1级别的"吃火锅"编程题,看似简单却蕴含了多个基础但关键的编程知识点。题目要求我们编写一个程序,能够自动分析朋友发来的聊天记录,统计其中提到"chi1 huo3 guo1"(吃火锅的拼音加数字标注形式)的情况。
在实际开发中,类似的文本分析需求非常常见。比如:
- 客服系统需要统计用户咨询中提及特定关键词的频率
- 日志分析工具需要抓取包含错误代码的日志条目
- 社交平台需要监测特定话题的讨论热度
题目给出了明确的输入输出规范:
- 输入:多行文本,以单独一行的"."作为结束标志
- 输出:
- 第一行:总信息条数
- 第二行:若有关键词,输出"首次出现行号 匹配总行数";若无,输出表情符号"-_-#"
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心解题思路
2.1 输入处理策略
处理多行输入是这道题的第一个关键点。与常规的单次输入不同,这里需要:
- 持续读取输入直到遇到终止符"."
- 每行可能包含空格,不能使用简单的按词读取
- 需要准确记录行号信息
在C语言中,我们通常使用字符数组配合特定的输入函数来处理这种情况。而在C++中,string类提供了更便捷的处理方式。
2.2 字符串匹配机制
查找子串"chi1 huo3 guo1"是本题的核心算法部分。需要注意:
- 必须是完整匹配,不能是部分匹配
- 大小写不敏感(虽然本题输入保证是小写)
- 需要记录首次出现位置和总出现次数
2.3 状态记录与输出
程序需要维护三个关键状态:
- 总行数计数器
- 首次匹配行号(初始为0表示未匹配)
- 匹配总次数计数器
输出时需要根据匹配结果进行分支处理,这体现了实际业务中常见的"有数据则展示,无数据则提示"的逻辑。
3. C语言实现详解
3.1 基础代码结构
c复制#include <stdio.h>
#include <string.h>
#define MAX_LINES 100
#define MAX_LEN 81
int main() {
char lines[MAX_LINES][MAX_LEN];
int total = 0, first = 0, count = 0;
// 输入处理循环
whil
