统计数字中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]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)363
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)327
- C++ 求解:最少操作次数让字符串无子串 “friend” (字节豆包 | 153点数解答 | 2024-08-17 16:29:54)504
- C++ 求解:最少操作次数让字符串不再含 “friend” 子串!(讯飞星火 | 260点数解答 | 2024-08-17 16:30:49)490
- Python 巧解:最少操作次数让字符串告别“friend”子串(字节豆包 | 139点数解答 | 2024-08-18 13:04:14)430
- 3414 数字游戏:Python 求解 8 位 01 字符串中 1 的个数 (字节豆包 | 106点数解答 | 2024-10-27 14:23:27)454
- 巧用字符添加,计算字符串中“our”最大数量及开发注意要点(DeepSeek | 376点数解答 | 2025-10-30 19:20:06)106
- C 语言实现:处理字符串生成最多 “our” 串,附代码及关键开发注意点 (DeepSeek | 257点数解答 | 2025-10-30 19:20:36)148
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)573
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)395
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)266
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)320