欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言:从键盘输入一个字符串str,统计str中小写字母a到z共26个字母的个数(个数为0的不显示,其它字符不统计)。

程序员文章站 2022-07-14 23:51:14
...

对于初学者,看到此类字符串统计的题,首先会想到if选择语句
做好范围条件如:(‘a’<=str[i])&&(str[i]<=‘z’)
这样做是为了把输入的字符串做一个分类。但之后的统计字符串中每个字母出现的特定的数目束手无策。(比如我一开始决定if选择判定26个字母挨个统计且后面还要再编写出现个数为0的情况,太过复杂)
此时需要特定的算法。
借鉴了其他程序员的代码,注意到以后的字母表示可以通过相应的表达式。

代码展示:

#include<stdio.h>
#include<string.h>
#define N 100//宏定义便于定义字符数组的宽度
int main()
{
    int cnt[26]={0},len,i,j;
	char str[N];//宏定义

	printf("请输入一个字符串!\n");
	gets(str);
     
	len=strlen(str);//strlen剔除'\0'
	for(i=0;i<len;i++)
	{
		for(j=0;j<26;j++)//26个字母
		{
			if(str[i]=='a'+j)//此处就是一个表达式,'z'与'a'相差26,在'a'上特定加上数字即可表示相应字母
			{
				cnt[j]++;//这样解决了特定字母出现个数特定数组下标统计。
				break;//内循环一个判定完之后暂停。等待外循环的下一个字符。
			}
		}
	}
printf("统计结果为:\n");
	for(i=0;i<26;i++)
	{
		if(cnt[i]!=0)
		{
			printf("%c:%d\n",i+'a',cnt[i]);//此处的i+'a'较str[i]更好,若是str[i]还得一一判定是否为字母,且i是记录了输入字符串中有哪些字母,在'a'之上相加个数即可表示。
		}
	}


	return 0;
}

代码分析详见代码中。

相关标签: 低产 字符串