就是字符串有多行,不止一行
#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;
}