电话:13485538018
关闭
您当前的位置:首页 > 职场资讯 > 面试秘籍

C语言面试宝典:笔试题解析,求字符串最多字符(大小写独立计数)

来源:网络整理 时间:2026-07-05 作者:佚名 浏览量:

这是, 一个读者朋友, 在知识星球上, 提到的, 两个笔试题儿, 第一, 第一个题目, 比较简单, 关键, 关键之处在于, 第二个题目, 那个「编程题」, 我文章里, 所写的, 解题思路, 应该不是, 最好的, 期望, 那些大神读者们, 能够给出, 更好的答案, 从而, 让这个, 充斥乐趣的, 程序世界, 再次增添, 一些乐趣, 所以, 所以, show your code。

第一题,求如下输出

#include "stdio.h"
#define m(x,y) (x)<(y)?x:yint main(){ printf("%dn",10*m(10,15)); return 0;}

假如身为学生, 那么建议先瞅瞅题目, 接着在心里默默念叨一番之后再去接着看答案, 我晓得这是一道极其简单的题目, 然而也千万别疏忽大意。

输出:

15
--------------------------------Process exited after 0.2808 seconds with return value 0请按任意键继续. . .

编程题

输入一个由字符所构成的串, 之后去判定其中数量最多的字符究竟是哪一个, 大写字符与小写字符都需要单独进行数量统计

#include "stdio.h"#include "string.h"
#define m(x,y) (x)<(y)?x:yint main(){ int i=0,j=0,m=0; char s[100]; char r[255]; memset(r,0,sizeof(r)); memset(s,0,sizeof(s)); gets(s); m=strlen(s); printf("%d %sn",m,s);
for(i=0;i { r[s[i]]++; //putchar(s[i]); } printf("n----------n"); for(i=0;i<255;i++) printf("%d ",r[i]); printf("n----------n"); for(i=0;i<255;i++) { char tmp = 0; for(j=0;j<255-i;j++) { if(r[i] > r[j]) { tmp = r[j]; r[j]=r[i]; r[j]=r[i]; } } } printf("n----p------n"); for(i=0;i<255;i++) printf("%d ",r[i]); printf("n----------n"); printf("%dn",r[254]); return 0;}

编程题字符串最多字符判断_c语言面试宝典_遍历字符数组<a href=统计频率"/>

首先, 上面呈现的是一个由读友所提出的解决方案, 然而呢, 我对于这个方案并非十分满意。原因在于, 主要是觉得代码行数略微有点多。经历了长时间的冥思苦想之后, 想出了下面这个更为愚蠢的办法。

#include "stdio.h"#include "string.h"#include "stdint.h"
int main(void){ char s[100]; uint16_t r[100]; int m=0,i=0,j=0; uint8_t temp=0,max=0; memset(s,0,sizeof(s)); memset(r,0,sizeof(r));
gets(s); m = strlen(s); for(i=0;i { for(j=0;j { if( s[i] != ((r[j]>> 8)&0xFF) ) { if(r[j] == 0) { r[j] = (s[i] << 8)&0xFFFF; r[j] += 0x0001; break; } } else { r[j] += 0x0001; break; } } }
temp = r[0]&0xFF; for(i=0;i { if(r[i] != 0) printf("%c:%dn",r[i]>>8,r[i]&0xFF); if((r[i]&0xFF) > temp) { temp = r[i]&0xFF; max = i; } } printf(">>>%c:%dn",r[max]>>8,r[max]&0xFF); return (0);}

我依旧觉得这并非是最为理想的方案, 而后在知识星球那儿, 有一位读者给出了评论, 我瞧了评论之后从中获得了启发, 进而又实现了一次进化。

这个思路跟上面第一段代码相近, 对字符串里的每一个字符进行遍历, 字符属于char类型, 字符的值与「0 - 255」存在对应关系, 接着判断相同字符, 若与「0 - 255」的某个位置相同, 那么该位置数组的值就加1。

然后寻找最大只的时候,也要遍历一遍。

有着这样一个弊端, 那便是遇上几个字符数量相同且同为最多字符的情况时, 该如何将它们一同输出, 要是采用我第二个方法的话, 进行修改会相对容易些。

代码如下:

#include "stdio.h"#include "string.h"#include "stdint.h"
int main(){ uint8_t i=0,temp=0; uint8_t cos = 0; char s[100]; char r[255]; memset(r,0,sizeof(r)); memset(s,0,sizeof(s)); gets(s); i=strlen(s); printf("%dn%sn",i,s);
for(i=0;i { r[s[i]]++; } temp = r[0]; cos = 0; for(i=0;i { if(r[i] > temp) { temp = r[i]; cos = i; } } printf("%d:%c:%dn",cos,(char)cos,r[cos]);
return 0;}

微信扫一扫分享资讯
相关推荐
暂无相关推荐
客服服务热线
13485538018
24小时服务
微信公众号
手机浏览

CopyrightC 2009-2025 All Rights Reserved 版权所有 芜湖人才网 本站内容仅供参考,不承担因使用信息、外部链接或服务中断导致的任何直接或间接责任,风险自担。如有侵权,请联系删除,联系邮箱:ysznh@foxmail.com 鄂ICP备2025097818号-15

地址: EMAIL:qlwl@foxmail.com

Powered by PHPYun.

用微信扫一扫