题目:从键盘输入一行或几行字符串,行数由键盘输入,一行字符串用字符数组存储。请统计所输入的字符串中26个字母(不区分大小写)出现的次数,并将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。如果没有字母,请输出字符串中无字母。
#include<iostream>
using namespace std;
int b[26] = { 0 };
void func(char a)
{
if (a >= 'a' && a <= 'z')
{
b[a - 'a']++;
}
else if (a >= 'A' && a <= 'Z')
{
b[a - 'A']++;
}
}
int main()
{
int n;
cin >> n;
char a[100] = { 0 };
for (int i = 0; i < n+1 ; i++) //我的问题在这
{
cin.getline(a, 100);
int j = 0;
while (a[j] != '\0')
{
func(a[j]);
j++;
}
}
int count = 0;//判断有无字母
for (int i = 0; i < 26; i++)
{
if (b[i] != 0)
{
cout << char(i + 'a') << ":" << b[i] << endl;
count++;
}
}
if (count == 0)
{
cout << "字符串中无字母。" << endl;
}
return 0;
}
因为输入完数字后还有一个回车在缓冲区没被读取
getline()会把它当做一行读取
你也可以在for循环的上一行使用getchar()
就可以把n+1换成n了