C面试题:统计字符个数,并按先后顺序输出

统计字符个数

题目:假设输入一行字符串。
统计其中小写字母出现的次数,并按照出现次数的多少依次输出。
当出现相同次数的字母时,按照字母的先后顺序依次输出
例如:“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;
}

猜你喜欢

转载自blog.csdn.net/weixin_50941322/article/details/114334019