酷代码 AI
菜单

7-1 统计单词数 分数 10 作者 陈宇璟 单位 浙江大学 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例 2)。 输入格式 共 2 行。 第 1 行为一个字符串,其中只含字母,表示给定单词; 第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。 输出格式 一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 $$ 开始);如果单词在文章中没有出现,则直接输出一个整数 -1。 注意:空格占一个字母位 输入样例: To to be or not to be is a

```cpp #include <iostream> #include <string> #include <cctype> // 转换为小写字母 void toLowerCase(std::string &str) { for (char &c : str) { c = std::tolower(c); } } int main() { std::string target; std::string article; // 读取目标单词 std::cin >> target; // 读取文章 std::cin.ignore(); std::getline(std::cin, article); // 将目标单词和文章都转换为小写 toLowerCase(target); toLowerCase(article); int count = 0; int firstPos = -1; int pos = 0; while (pos < article.length()) { // 跳过前导空格 while (pos < article.length() && article[pos] == ' ') { pos++; } int wordStart = pos; std::string currentWord; // 提取当前单词 while (pos < article.length() && article[pos] != ' ') { currentWord += article[pos]; pos++; } // 检查当前单词是否与目标单词匹配 if (currentWord == target) { count++; if (firstPos == -1) { firstPos = wordStart; } } } if (count > 0) { std::cout << count << " " << firstPos << std::endl; } else { std::cout << -1 << std::endl; } return 0; } ``` 代码解释: 1. `toLowerCase` 函数:将字符串中的所有字母转换为小写,以便在不区分大小写的情况下进行匹配。 2. 主函数 `main`: - 读取目标单词和文章。 - 将目标单词和文章都转换为小写。 - 初始化计数器 `count` 和首次出现位置 `firstPos` 为 -1。 - 遍历文章,跳过前导空格,提取当前单词。 - 检查当前单词是否与目标单词匹配,如果匹配则增加计数器,并记录首次出现位置。 3. 输出结果:如果找到目标单词,则输出出现次数和首次出现位置;否则输出 -1。 复杂度分析: - 时间复杂度:$O(n)$,其中 $n$ 是文章的长度。 - 空间复杂度:$O(m)$,其中 $m$ 是目标单词的长度。 [2025-12-15 16:21:39 | AI问答 | 590点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多