酷代码 AI
菜单
服务商

统计数字中0、1、2出现的次数(C++实现与字符串方法详解)

好的,我们来解决这个问题。这是一个**基础的数字频率统计**题目,非常适合用于锻炼字符串处理和循环遍历的基本功。 ## 👣 解题思路 我们可以通过以下两种常见方法来实现: 1. **字符串遍历法**(推荐):将整数转换成字符串,逐个字符判断。 2. **数字取余法**:通过循环不断对10取余,获取每一位数字,然后判断。 这里推荐 **字符串遍历法**,因为代码更简洁、处理更直观,且不需要担心负号等问题(题目输入为正整数)。 ### 🧱 步骤分解 1. **读入整数**:使用 `cin` 或 `scanf`。 2. **转换字符串**:使用 `to_string()` 将整数转为字符串,方便逐字符访问。 3. **初始化计数器**:定义三个变量 `count0`、`count1`、`count2`,初始值都为0。 4. **遍历字符串**:对每一个字符: - 如果字符等于 `'0'`,`count0++` - 如果等于 `'1'`,`count1++` - 如果等于 `'2'`,`count2++` 5. **输出结果**:按顺序输出三个计数,空格隔开。 ## 💻 代码实现 (C++) ```cpp #include <iostream> #include <string> using namespace std; int main() { // 1. 读入整数 int n; cin >> n; // 2. 将整数转换为字符串 string s = to_string(n); // 3. 初始化计数器 int count0 = 0, count1 = 0, count2 = 0; // 4. 遍历字符串中的每个字符 for (char c : s) { if (c == '0') { count0++; } else if (c == '1') { count1++; } else if (c == '2') { count2++; } // 其他数字不统计 } // 5. 输出结果 cout << count0 << " " << count1 << " " << count2 << endl; return 0; } ``` ## ✅ 样例验证 **样例1** 输入:`20200115` 字符串:`"20200115"` 遍历: - 2: 忽略 - 0: count0=1 - 2: 忽略 - 0: count0=2 - 0: count0=3 - 1: count1=1 - 1: count1=2 - 5: 忽略 输出:`3 2 2` ✅ **样例2** 输入:`902` 字符串:`"902"` 遍历: - 9: 忽略 - 0: count0=1 - 2: count2=1 输出:`1 0 1` ✅ ## 📌 关键知识点解释 | 概念 | 说明 | |------|------| | `to_string(n)` | 将整数 `n` 转换为 C++ 标准字符串类型 `string` | | `for (char c : s)` | 基于范围的 for 循环,依次取出字符串 `s` 中的每个字符赋值给 `c` | | 字符比较 `c == '0'` | C++ 中字符用单引号表示,比较时需注意数据类型一致 | | 计数器递增 `count0++` | 等价于 `count0 = count0 + 1` | ## ⚠️ 常见陷阱与优化建议 - **陷阱**:如果输入允许负整数,需要先取绝对值或对负号单独处理。本题输入为正整数,可忽略。 - **陷阱**:注意 `to_string` 需要 `#include <string>`,这是很多初学者容易遗漏的头文件。 - **优化**:若题目要求统计0-9所有数字的频率,可以改用**长度为10的数组** `freq[10]`,代码更简洁通用。 - **风格**:建议使用有意义的变量名,比如 `countZero` 而不是 `c0`,以提升可读性。 ## 🧰 拓展阅读 - C++ `string` 类官方文档:[cplusplus.com - string](http://www.cplusplus.com/reference/string/string/) - 数字统计类题目在算法竞赛中很常见,如 **LeetCode 统计数字出现的次数**、**蓝桥杯基础练习** 等。 --- ######[AI写代码神器 | 1016点数解答 | 2026-05-23 21:45:37]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]