ZZULIOJ 1131: 最常用字符(水题,getchar()的使用)

本文介绍了一种通过C语言解决找出字符串中最常出现字符的方法。利用getchar()函数逐个读取字符,并统计大小写字母的出现频次,最终输出ASCII码最小的最常用字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1131

1131: 最常用字符

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 2163   Solved: 1023

Submit Status Web Board

Description

英文字母里出现频率最高的是哪个字母呢? 给定一个字符串,输出字符串中出现次数最多的字母。

Input

输入一个只含有大小写字母和空格的字符串,长度不超过100,以回车结束。

Output

输出一个小写字母,表示该字符串中出现次数最多的字母。若答案有多个,则只输出ASCII码最小的那个。

Sample Input

An apple

Sample Output

a

思路:

前些天在刘汝佳的一本书看到 C11 标准不能使用 gets() 所以今天就拿这个题目练手 while() 中的 getchar() 的使用。


Code:

#include<stdio.h>
#include<cstring>
#include<algorithm>
#define AC main()
using namespace std;
const int MYDD = 1103;

int AC {
	int dd[32], c, MaxCount = 0, k;
//	char c;
	memset(dd, 0, sizeof(dd));

	while((c = getchar()) != '\n') {
		if(c >= 'a' && c <= 'z')
			dd[c - 'a']++, k = c - 'a';
		if(c >= 'A' && c <= 'Z')
			dd[c - 'A']++, k = c - 'A';
		if(MaxCount < dd[k]) MaxCount = dd[k];
	}

	for(int j = 0; j < 32; j++)
		if(dd[j] == MaxCount) {
			printf("%c", 'a' + j);
			break;
		}
	return 0;
}
/*
asddd
a
*/


<think>嗯,用户想找ZZULI OJ平台上问1077的解思路,特别是关于字符处理的方法。首先,我需要确认问1077的具体内容,但用户提供的引用中没有直接提到1077。不过,根据现有的引用信息,可以推测常见的字符处理问可能涉及字符串转换、字符比较或格式处理等。 用户提供的引用中有几个相关的例子。比如,引用[3]提到ZZULIOJ1134,是关于将字符串中的数字字符转换为整数并处理的方法。这可能涉及到遍历字符串、判断字符是否为数字,并进行相应的计算。另外,引用[2]是关于在线判系统中比较输出文件的,涉及处理空白符,这可能和字符过滤有关。引用[4]中的1025是关于找出字符,通过比较ASCII值,这可能与字符处理中的比较操作相关。 所以,可能的解思路包括:遍历输入的每个字符,进行条件判断(如是否为字母、数字或其他特定字符),进行计数或转换。例如,可能需要统计不同类别的字符数量,或者进行字符转换(如大小写转换)。此外,注意输入输出的格式,比如是否有多余空格或换行。 需要确保正确处理输入,例如使用getchar()逐个读取字符直到换行,或者用循环处理每个字符。对于分类统计,可能需要多个计数器变量,分别记录字母、数字、其他字符的数量。同时,注意边界情况,比如空输入或全是某类字符的情况。 可能的问点在于如何高效遍历字符串并准确分类字符,以及处理可能的异常情况。例如,引用[3]中的方法使用getchar()字符读取,并检查是否为数字,这可能适用于需要提取特定字符的情况。如果目1077需要类似的处理,可以借鉴这种方法。另外,引用[5]提到处理包含负数和零的情况,但输出小正整数,这可能涉及过滤和条件判断,不过不确定是否与1077相关。 综上,解步骤可能包括:读取输入字符串,初始化计数器,遍历每个字符进行分类统计,后输出结果。需要确保使用正确的条件判断,例如使用isalpha()函数判断字母,isdigit()判断数字等。如果目有其他要求,比如特定格式的输出或进一步处理,还需要相应调整。</think>### ZZULIOJ 1077 字符处理 解思路 根据ZZULIOJ平台常见的字符处理类目特点,结合解引用中的方法,推测**问1077可能涉及字符串遍历、字符分类统计或转换操作**。以下是通用解思路和示例方法: --- #### **步骤分析** 1. **输入处理** 使用`getchar()`或`fgets()`逐字符读取输入,直到遇到换行符,确保正确处理含空格的字符串[^3][^4]。 2. **字符分类** 初始化计数器(如字母、数字、其他字符),遍历每个字符: - 判断是否为大写/小写字母:`(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')` - 判断是否为数字:`ch >= '0' && ch <= '9'` - 其余归类为“其他字符”[^4]。 3. **结果输出** 按目要求格式输出统计值,例如: ``` 字母数: X 数字数: Y 其他字符: Z ``` --- #### **参考代码(C语言)** ```c #include <stdio.h> int main() { int letters = 0, digits = 0, others = 0; char ch; while ((ch = getchar()) != '\n') { if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) { letters++; } else if (ch >= '0' && ch <= '9') { digits++; } else { others++; } } printf("字母数: %d\n数字数: %d\n其他字符: %d\n", letters, digits, others); return 0; } ``` --- #### **注意事项** - **边界处理**:输入可能为空或全为某一类字符。 - **效率优化**:直接遍历一次字符串即可完成统计,时间复杂度为$O(n)$。 - **特殊字符**:需明确目对空格、换行符等的处理要求(参考在线判系统的字符比较逻辑[^2])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值