编写一个程序,计算并输出每个字母的数量(忽略字符大小写)

img


问题如图所示,不理解“一组英文输入将在多行内给出,读入后输出统计结果”的“多行”输入是什么意思,求解,还有请问我的代码错在哪

img

就是字符串有多行,不止一行

#include <iostream>
#include <string>
using namespace std;
 
int main() {
 
    string a;
    int num[26] = {0};
    while (getline(cin,a))
    {
        for(int i = 0;i < a.length();i++) {
            char c = a[i];
            if(a[i]<='Z' && a[i]>='A') {
                num[c-'A']++;
            }
            else if(c<='z' && c>='a') {
                num[c-'a']++;
            }
        } 
    }
    
    for(int i = 0;i<26;i++){
        cout << (char)(i+'a') <<  " : " << num[i] << endl;
    }
}
 

一组英文输入将在多行内给出,就是输入数据会包含多行
也就是需要考虑换行符,而你的程序中使用getline,是获取一行,所以遇到换行就会停止。把getline放到循环中,如果取不到就结束,取到了就开始处理。
另外内部的0到26的循环是多余的

#include <iostream>
#include <string>
using namespace std;

int main() {

    int num[26] = {0};
    char list[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    string a;

    while (true)
    {
        getline(cin,a);
        if(a.empty()) {
            break;
        }
        for(int i = 0;i < a.length();i++) {
            char c = a[i];
            if(c<='Z' && c>='A') {
                c += 'a'-'A';
            }
            if(c<='z' && c>='a') {
                num[c-'a']++;
            }
        } 
    };
    
    for(int i = 0;i<26;i++){
        cout << list[i] <<  " : " << num[i] << endl;
    }
}

多行:是指测试案例给出的字符可能是存在换行的,比如
abcde
kfogig
jfigkh 这样的形式,相等于提醒你字符中含有换行符

望采纳

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a[1200];
    int b[26]={0};
    cin>>a;
    for(int i=0;i<=strlen(a);i++){
        if(a[i]>='A'&&a[i]<='Z')
        a[i]+=32;
        b[a[i]-'a']++;
    }
    for(char i='a';i<='z';i++){
        printf("%c:%d\n",i,b[i-'a']);
    }
    return 0;
}