#【程序题】字符数量#
题目描述请统计一篇英文文章里所有小写字母各出现了几次。输入描述:输入若干行,处理到文件结尾符。字符总数<=100000输出描述:输出若干行,按字符序输出每种小写字符的出现次数,没有出现的字符不用输出。
示例1
输入abc abc
defabab ccc
ccc ccc
输出
a:4
b:4
c:11
d:1
e:1
f:1
我的思路大致分三大步,第一步获取数据到数组,第二步对数据进行冒泡排序,第三步统计数据,(第二步是为了第三步更方便统计,比如aaaabbcccf,只要判断后一位是不是和前一位相等)
具体思路详见下面。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
char a[100000];
int i = 0;
int j;
int k;
char c;
//第一步提取数据到数组a[]
while ((c = getchar()) != EOF)
{
if (c >='a'&&c<='z')//题目有说明是统计小写字符,这里要加个条件
{
a[i] = c;
i++;
}
}
//第二步,这里就是冒泡排序
for (j = 0; j < i-1; j++)
{
for (k = 0; k < i-j-1; k++)
{
if (a[k] > a[k + 1])
{
int t;
t = a[k + 1];
a[k + 1] = a[k];
a[k] = t;
}
}
}
//第三步统计字符
int t = 1;
for (j = 0; j < i+1; j++) /*这里注意是小于i+1,如果是<i,只循环到a[i-1],那么比如aaaaccf,这个f就不会打印出来,不理解可以走一遍*/
{
if (a[j] == a[j-1])
{
t++;
}
else
{
if(j!=0) //要去除j=0,a[0]的情况,否则,后面会打印出啊a[-1]
{
printf("%c:%d\n", a[j - 1], t);
t = 1; //到了新的字符,重置个数为1,再继续统计
}
}
}
return 0;
}
欢迎有更好的方法推荐!我们一起交流