
由于作者小白是一个初学者,我在写这题的时候被这题的输入输出卡了很久竟然。
我还以为是我里面的哪个逻辑错了。后面询问了老师,才知道自己错在哪里。
所以多做题还是好处有很多了。
那么话不多说开始今天的讲解。
首先我先说我今天遇到的问题。
就是这个输入输出的问题。
由于这道题要输入 一个未知数 n.代表我们有几个字符串要处理。
所以我们首先要定义一个未知数n,并输入它。
但是我们在进行后边字符串的读入的时候,必定会在输入这个n 之后有一个换行
我们 用 %d ,%f , %s 等格式说明符时,输入时按回车产生的换行符会残留在缓冲区
于是当我想要输入第一个字符串时,就会出现如下的结果

我们这里再对比一下正确答案

于是这个换行符就占用了第一个字符串
产生了错误。
想要处理这个问题,就要在输入这个n之后,加一个 getchar()读出来这个回车之后,再fgets()我们的字符串。
这里我们定义的数组 ch[205],虽然最多只要200个字符,但是这里我们定义205个,为了防止出现边界性问题,防止数组越界,以及有时有助于算法的实现,能够提高代码的健壮性。
第一部分的代码如下
#include<stdio.h>
#include<string.h>
int main(){
int n;
char ch[205];
scanf("%d",&n);
getchar();
然后我们进入循环。
我们想要找到最大连续长度的字符串。并且找到那个字符,以及它到底多长
于是我们就有了三个变量,为了形象一些,这里我们使用它们的英文,增强可读性。
maxcount=0 , maxchar=ch[0],
count=1;
这里我们想为什么 count 是 1 呢。
因为我们要比较 前一个和后一个字符,是不是一样的。如果一样 count++,
但是此时有两个相同的字符 所以我们的起始 count=1.
进入 循环对比。因为我们是跟前一个字符作比较,所以我们这里 j=1。(稍后讲解与后一个字符比较,差别不是很大)
如果这个字符 和前一个字符一致
ch[j]==ch[j-1]
那么count++;
当这个字符和前一个字符不一致的时候,那么此时判断 count 和 maxcount的大小
如果 count> maxcount 那么 maxcount=count;
因为此时这个字符和前一个字符不同,所以我们统计的是上一个字符的个数。
则 maxchar = ch[j-1],
if(count > maxcount){
maxcount=count;
maxchar=ch[j-1];
}
这里是 j从零开始比较它下一个数字的代码

做完这些以后 我们此时 遇见不一样的字符了。
所以我们的 count 要更新为 1;
count=1;
接下来是第二部分的代码
for(int i=0;i<n;i++){
scanf("%s",ch);
int maxcount=0;
int maxchar=ch[0];
int count=1;
for(int j=1;j<len;j++){
if(ch[j]==ch[j-1]){
count++;
} else{
if(count>maxcount){
maxcount=count;
maxchar=ch[j-1];
}
count=1;
}
}
是不是以为到这里就结束了。
不是的。
当时我自己做的时候,也认为结束了。
但是我画一个图,你们肯定就知道为什么了

因为我们的算法是遇到不一样的字符去统计上一个的字符的count.并与maxcount做比较。
所以当我们遇到最后一个不一样的字符以后,最后这一串相连续的字符,我们没有统计到
所以我们要再统计一次。
才完成我们的题目
然后输出就可以了
if(count>maxcount){
maxcount=count;
maxchar=ch[len-1];
}
printf("%c %d\n",maxchar,maxcount);
}
return 0;
}
如果你觉得作者的思路还行的话,不妨给小白作者留下一个点赞吧。
感谢您的阅读
接下来是完整代码
#include<stdio.h>
#include<string.h>
int main(){
int n;
char ch[205];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",ch);
int len=strlen(ch);
if(ch[len-1]=='\n'){
ch[len-1]='\0';
}
int maxcount=0;
int maxchar=ch[0];
int count=1;
for(int j=1;j<len;j++){
if(ch[j]==ch[j-1]){
count++;
} else{
if(count>maxcount){
maxcount=count;
maxchar=ch[j-1];
}
count=1;
}
}
if(count>maxcount){
maxcount=count;
maxchar=ch[len-1];
}
printf("%c %d\n",maxchar,maxcount);
}
return 0;
}