dhu复试基础——64 统计字母

64 统计字母

作者: 朱星垠 时间限制: 1S章节: 字符串

问题描述 :

输入一串字符串,以’!'结束,不分大小写,统计其中每种英文字符出现的次数。

输入说明 :

你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成,其中只包括大小写的英文字母和’!’,且以’!'结尾,每行字符数不超过100。两组数据之间没有多余的空行。在行首和行尾没有多余的空格。

输出说明 :

对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。每组测试数据由若干行组成,统计每组输入数据输出中出现字母的次数,按照字典序输出,每个出现字母及其出现次数占据一行。在行首和行尾没有多余的空格。具体格式见下。

输入范例 :

asdfasdf!
aAZZz!!

输出范例 :

A:2
D:2
F:2
S:2
A:2
Z:3

#include 
#include 
#include 
void sort_str(char str[],int arr[],int x)//给char数组排序,并改变相对应的计数数组
{
	int i,j,count;
	char temp;
	for(i=0;i<x;i++)
	{
		for(j=i+1;j<x;j++)
		{
			if(str[i]>str[j])
			{
				temp=str[i];
				str[i]=str[j];
				str[j]=temp;
				count=arr[i];
				arr[i]=arr[j];
				arr[j]=count;
			}
		}
	}
}
void upper(char *p,int x)//把数组内字母直接全部改为大写
{
	int i;
	for(i=0;i<x;i++)
	{
		if(*(p+i)>='a'&&*(p+i)<='z')
			*(p+i)-=32;//小写的ascii码比大写大32
	}
}
int main()
{
	void sort_str(char a[],int b[],int x);
	void upper(char *p,int x);
	char str[100];
	char *p=str;
	int len,i,j,k;
	while(gets(str))
	{
		int arr[100]={0};
		len=0;
		for(i=0;str[i]!='!';i++)
			len++;
		upper(p,len);
		for(i=0;i<len;i++)
		{
			for(j=0;j<i;j++)
			{
				if(str[i]==str[j])
				{
					arr[j]++;
					for(k=i;k<len;k++)
						str[k]=str[k+1];
					i--;//删除后数组中原本的i+1还未判断。
					len--;
				}
			}
		}
		sort_str(str,arr,len);
		for(i=0;i<len;i++)
			printf("%c:%d\n",*(p+i),arr[i]+1);
	}
	return 0;
}

while中的gets(str)不能写成gets(str)!=EOF,因为gets()返回类型是指针,可以写成gets(str)!=NULL,但是没必要。

你可能感兴趣的:(dhu复试基础——64 统计字母)