山东理工——1525

山东理工——1525

Problem Description

输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。

Input

输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。

Output

逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。

Sample Input

I am a student
a good programming problem
ABCD abcd ABCD abcd

Sample Output

a 2
o 4
A 2

**分析:**读入的字符串有空格,不能用scanf,这里应用gets()获取字符串

代码如下:

#include<stdio.h>
int main(void)
{
	char a[100], b[100] = {'\0'};
	char p[100] = {'\0'};
	int t[100] = {0};
	int n, i, j,e,j_;
	int max, min, max_[10];
	while (gets(b) != NULL)//多次输入,读入字符串b
	{
		for (i = 0, j = 0; b[i]; i++)//将b里边的空格删除并保存在字符串a内
		{
			if (b[i] != ' ')
				a[j++] = b[i];
		}
		a[j] = '\0';  //给a设置结尾
		j = 0; p[0] = '\0';
		for (i = 0; a[i]; i++)//遍历字符串a,并对每一个元素分析
		{
			e = 0;
			for (j_ = 0; p[j_] != '\0'; j_++)//遍历字符串p,a中的元素与每一个p中的元素比较
			{
				if (a[i] == p[j_])
					e=e+1;
			}
			if (e == 0)//如果a的这个元素与p中的任意元素不相同
			{
				p[j] = a[i];//让p保存这个字符
				p[j + 1] = '\0';
				t[j]=t[j]+1;//与p此位置对应的数量增加
				j=j+1;
			}
			else//如果a的这个元素与p中的元素有相同的
			{
				for (j_ = 0; p[j_] != '\0'; j_++)//遍历p找到那个位置与a的这个元素相同
				{
					if (a[i] == p[j_])
					{
						t[j_] = t[j_] + 1;//对应位置的数量增加
						break;
					}
				}
			}
		}
		max = 0;
		for (i = 0; t[i] != 0; i++)//找到最大的数量是多少
		{
			if (t[i] > t[max])//t[max]为最大数量
				max = i;
		}
		j=0;
		for (i = 0; t[i] != 0; i++)
		{
			if (t[i] == t[max])//找到有哪些位置字符的数量与最大数量相同
			{
				max_[j] = i;//保存在max_中
				j++;
			}
		}
		min = 0;
		for (i = 0; i < j; i++)//找到最大数量的字符里边的ASCII码最小的
		{
			if (p[max_[i]]-'0' < p[max_[min]]-'0')//
				min = i;//找到数量最大,并且ASII码最小的位置为max_[min]
		}
		printf("%c %d\n",p[max_[min]],t[max_[min]]);
		for(i=0;i<=100;i++)//将p与t赋值为0
		{
			p[i]='\0';
			t[i]=0;
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值