问题标题: 酷町堂:2824 字母统计

0
1
李宏浩
李宏浩
新手守护
新手守护

题目描述 Description

现在有一行英文句子,里面包含大小写字母以及空格,字母个数(包含空格)不超过10万。
请你统计这个句子中每个字母出现的个数(不需要统计空格的个数)。
按照a~z的顺序输出。
第一行输出小写字母的个数
第二行输出大写字母的个数

输入描述 Input Description

输入一个整数n(n不超过100000),
第二行是总长度为n英文句子,包含大小写字母和空格

输出描述 Output Description

输出两行
第一行输出每个小写字母的个数空格隔开,a~z的顺序
第二行输出每个大写字母的个数空格隔开,A~Z的顺序

样例输入 Sample Input

17 I love Codingtang

样例输出 Sample Output

a 1 d 1 e 1 g 2 i 1 l 1 n 2 o 2 t 1 v 1 C 1 I 1

我的错误代码:

#include <iostream>
using namespace std;
int b[155];
int main(){
    int c;
    cin>>c;
    string a;
    cin>>a;
    getline(cin,a);
    for(int i=0;i<=a.size();i++){
        b[int(a[i])]++;
    }
    for(int i=97;i<=122;i++){
        if(b[i]>0){
            cout<<(char)i<<" "<<b[i]<<" ";
        }
    }
    cout<<endl;
    for(int i=65;i<=90;i++){
        if(b[i]>0){
            cout<<(char)i<<" "<<b[i]<<" ";
        }
    }
    return 0;
}

请各位大佬们看看哪里错了?

||我的输出错了||


0
0
王志成
王志成
初级光能
初级光能

首先,在你的字符读取过程中,有问题。你先用了 “cin >> a;” 然后又用了 “getline(cin, a);” 这导致你刚才从 cin 读入的字符被 getline 读取的字符替换掉了。你可能需要去掉 “cin >> a;” 这行代码,只用 getline 来获取整行输入。

其次,归类字母时,ASCII码的范围应当是 a(小写)在97-122, A(大写)在65-90,而不是你给出的97-123和65-88,你需要修改这两个循环的边界值。

最后,在字符统计的循环中,你使用的是小于等于 size 的方式,实际上数组索引是从0到size-1,所以你需要修改循环条件为"i<a.size()"。

0
王志成
王志成
初级光能
初级光能

吃换行要getline,不是cin

0
彭志杰
彭志杰
初级天翼
初级天翼

把第八行删了,在第九行后加上:getline(cin,a);

还有你的第一个循环应该是i<a.size()

 

问题:下标,吃换行

0
0
王昱林
王昱林
高级守护
高级守护

你是不是复制代码了?

注意桶数组的大小!!

0
我要回答