问题 :不定行数的读入
问题描述
读入多行字符串,只包含小写字母,统计每种字符的出现次数
输入
输入多行,但是不知道几行,总字符数量不超过 1000010000
输出
输出每种字符的出现次数,见样例
样例
输入数据 1
sfadfjsldf
dfsdfadf
erqeptptu
afdfadf
dfasdfasdfa
fsadfasdf
fsdfasdfsafdsadf
fsdfasdfa
sewrqerqwe
r
r
w
r fdfsdfsadfsadfzmzmmzmzmmzmz
输出数据 1
a:16
d:22
e:5
f:28
j:1
l:1
m:7
p:2
q:3
r:6
s:17
t:2
u:1
w:3
z:6
那位大好人能教教我啊!
结束符是什么
供参考:
#include <stdio.h>
#include <ctype.h>
int main()
{
int word[26]={0},i;
char ch;
while((ch = getchar()) != EOF){ //ctrl+z 结束输入
if(islower(ch)) word[ch - 'a']++;
}
for(i = 0;i < 26; i++){
if(word[i])
printf("%c:%d\n", i+'a', word[i]);
}
return 0;
}
如果输入只有小写字母,定义一个长度为26的数组来存储计数结构即可。
第0位存储a的计数结果
第1位存储b的计数结果
...
第25位存储z的计数结果
逐行逐个字符读取输入的字符x
通过下面的命令实现计数。
a[x-'a']+=1;
#include<stdio.h>
#include<ctype.h>
int main()
{
int t = 1000; // 限定最大可见字符个数,当然空白字符不计算在内。
int n_lower[26]; // 统计a到z各个字母数量
int c;
printf("输入若干行,输入0结束输入,最多只统1000个可见字符\n\n");
for (int i = 0; i < 26; i++)
{
n_lower[i] = 0;
}
while ((c = getchar()) != EOF && (char)c != '0' && t > 0)
{
if (!isspace((char)c))
t--;
if (islower((char)c))
{
n_lower[(char)c - 'a']++;
}
}
printf("\n可见字符总数(不包括最后个0):%d个\n", 1000 - t);
for (int i = 0; i < 26; i++)
{
printf("\n字母%c:%d个", 'a' + i, n_lower[i]);
}
return 0;
}