//统计字符


#include<stdio.h>
int main(){
    int digit,letter,other;
    char ch;
    int i;
    digit=letter=other=0;
    printf("Enter 10 characters:");
    for(i=1;i<=10;i++){
        ch=getchar();
        if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
        letter++;
        else if(ch>'0'&&ch<'9')
        digit++;
        else other++;
    }
    printf("letter=%d,digit=%d,other=%d\n",letter,digit,other);
    return 0;
}

#include<stdio.h>
int main(){
    int blank,digit,i,other;
    char ch;
    blank=digit=other=0;
    printf("Enter 10 characters:");
    for(i=1;i<=10;i++){
        ch=getchar();
        switch(ch){
            case ' ';
            case '\n';
            blank++;
            break;
            case '0';case '1';case '2';case '3';case '4';case '5';
            case '6';case '7';case '8';case '9';
            digit++;
            break;
            default;
            other++;
            break;
        }
    }
    printf("blank=%d,digit=%d,other=%d\n",blank,digit,other);
    return 0;
}

以下是完整的解决方案,包括代码实现和解释。 ### 代码实现 ```cpp #include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; // 统计字符出现的频度 void Count(string c, int b[]) { for (char ch : c) { if (ch >= '!' && ch <= '~') { //统计可打印字符(ASCII码33到126) b[ch]++; } } } int main() { string input; while (getline(cin, input)) { // 按行读取输入 if (input == "0") break; // 如果输入为"0",结束循环 // 初始化频度数组 int freq[128] = {0}; // ASCII码范围是0-127,初始化为0 // 调用Count函数统计频度 Count(input, freq); // 存储非零频度的字符及其频度 vector<pair<char, int>> result; for (int i = 0; i < 128; ++i) { if (freq[i] > 0) { result.emplace_back((char)i, freq[i]); } } // 按照ASCII码顺序排序 sort(result.begin(), result.end(), [](const pair<char, int>& a, const pair<char, int>& b) { return a.first < b.first; }); // 输出结果 for (auto& p : result) { cout << p.first << ": " << p.second << endl; } } return 0; } ``` --- ### 代码解释 1. **`Count` 函数**: - 该函数接收一个字符串 `c` 和一个整型数组 `b`。 - 遍历字符串中的每个字符,如果字符是可打印字符(ASCII码范围为33到126),则将对应位置的频度加1。 2. **主程序逻辑**: - 使用 `getline(cin, input)` 按行读取输入,直到遇到字符串 `"0"` 为止。 - 创建一个大小为128的数组 `freq`,用于存储每个ASCII字符的频度。初始化时所有值为0。 - 调用 `Count` 函数统计当前字符串中每个字符的频度。 - 将非零频度的字符及其频度存储到 `vector<pair<char, int>> result` 中。 - 使用 `sort` 函数按照字符的ASCII码顺序对结果进行排序。 - 最后遍历排序后的结果并输出每个字符及其频度。 3. **注意事项**: - 程序只统计ASCII码范围内的可打印字符(33到126)。 - 输入为多组数据,每组数据处理完成后直接输出结果,无需额外分隔符。 --- ### 示例运行 #### 输入: ``` hello world abcABC 0 ``` #### 输出: ``` : 1 !: 0 #: 0 $: 0 %: 0 &: 0 ...(省略中间部分) a: 1 b: 1 c: 1 d: 1 e: 1 h: 1 l: 3 o: 2 r: 1 w: 1 ...(省略中间部分) A: 1 B: 1 C: 1 ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超翔之逸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值