统计字符个数
题目:假设输入一行字符串。
统计其中小写字母出现的次数,并按照出现次数的多少依次输出。
当出现相同次数的字母时,按照字母的先后顺序依次输出
例如:“I love programming@C with class and java”
输出:
分析:题目要求统计小写字母,则可使用 islower() 函数。
(PS:需要引用头文件<ctype.h>),将小写字母录入。
对于出现相同次数的字母,还要按照字符的ANSCII进行排序。
我们想到可以用数组来顺序存储a~z的出现次数。
定义数组 int arr[26];
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<ctype.h>
void calc_charnum(char* p)
{
int count[26] = {
0 };
int i, j;
int max=0; //max为字母出现的最大次数
assert(p);
for (i = 0; *p != '\0'; i++)
{
if (islower(*p)) //小写字母则录入
{
max = ++count[(int)*p - 97] > max ? count[(int)*p - 97] : max;
//以数组的形式存储字符
//p++; //放在里面发生错误,到'.'时变为死循环
}
p++;
}
for (i = 1; i <= max; i++)
{
int flag = 0;
for (j = 0; j < 26; j++)
{
if (i == count[j]) //根据出现次数找出对应的字母
{
printf("%c", j+97);//打印字符
flag = 1;
}
}
if (flag)
printf(" :%d\n", i); //在字母后面输出相应的次数
}
}
int main()
{
char arr[] = "I love programming@C with class and java";
calc_charnum(arr);
return 0;
}