程序应用字符数组存储从键盘输入的一行英文(100个以内),统计各个字符出现的次数。请完善程序。 裁判测试程序样例: #include <stdio.h> int main(){ char c[100]; gets(c); { /* 请在这里填写答案 */ } return 0; } 输入格式: 请输入一行字符(字符个数小于100)。 输出格式: 统计个字符的数量,一行一个字符地按照以下格式输出数量不为0的字符及其数量: <字符>--><数量> 输入样例: Having an active youngster about the house can be quite wearing. 输出样例: -->10 .-->1 H-->1 a-->6 b-->2 c-->2 e-->7 g-->3 h-->2 i-->4 n-->5 o-->3 q-->1 r-->2 s-->2 t-->5 u-->4 v-->2 w-->1 y-->1
时间: 2023-08-07 17:14:42 浏览: 111
你可以尝试使用一个大小为 256 的数组来存储各个字符出现的次数,数组下标为字符的 ASCII 码值。然后遍历输入的字符数组,对于每个字符,将其在数组中对应的位置的计数器加 1。最后再遍历一遍数组,输出计数器不为 0 的字符及其数量即可。
完整代码如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char c[100];
int cnt[256] = {0}; // 初始化计数器数组为 0
cin.getline(c, 100); // 使用 getline 获取输入的一行字符串
int len = strlen(c);
for (int i = 0; i < len; i++) {
cnt[(int)c[i]]++; // 将数组下标转为字符的 ASCII 码值,计数器加 1
}
for (int i = 0; i < 256; i++) {
if (cnt[i] > 0) {
if (isalpha(i)) { // 如果是字母,则转为大写字母输出
cout << (char)toupper(i) << "-->" << cnt[i] << endl;
} else {
cout << (char)i << "-->" << cnt[i] << endl;
}
}
}
return 0;
}
```
注意,这里使用了 `cin.getline()` 来获取输入的一行字符串,而不是 `gets()`,因为 `gets()` 存在安全性问题,已经被废弃。同时,为了让输出结果中的字母都是大写字母,还可以使用 `toupper()` 函数将字母转为大写字母。
阅读全文