c语言的练习-字符串的练习-寻找最长连续字符以及出现次数

由于作者小白是一个初学者,我在写这题的时候被这题的输入输出卡了很久竟然。

我还以为是我里面的哪个逻辑错了。后面询问了老师,才知道自己错在哪里。

所以多做题还是好处有很多了。

那么话不多说开始今天的讲解。

首先我先说我今天遇到的问题。

就是这个输入输出的问题。

由于这道题要输入 一个未知数 n.代表我们有几个字符串要处理。

所以我们首先要定义一个未知数n,并输入它。

但是我们在进行后边字符串的读入的时候,必定会在输入这个n 之后有一个换行

我们 用 %d ,%f , %s 等格式说明符时,输入时按回车产生的换行符会残留在缓冲区

于是当我想要输入第一个字符串时,就会出现如下的结果

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

于是这个换行符就占用了第一个字符串

产生了错误。

想要处理这个问题,就要在输入这个n之后,加一个 getchar()读出来这个回车之后,再fgets()我们的字符串。

这里我们定义的数组 ch205,虽然最多只要200个字符,但是这里我们定义205个,为了防止出现边界性问题,防止数组越界,以及有时有助于算法的实现,能够提高代码的健壮性。

第一部分的代码如下

#include<stdio.h>

#include<string.h>

int main(){

int n;

char ch205;

scanf("%d",&n);

getchar();

然后我们进入循环。

我们想要找到最大连续长度的字符串。并且找到那个字符,以及它到底多长

于是我们就有了三个变量,为了形象一些,这里我们使用它们的英文,增强可读性。

maxcount=0 , maxchar=ch0,

count=1;

这里我们想为什么 count 是 1 呢。

因为我们要比较 前一个和后一个字符,是不是一样的。如果一样 count++,

但是此时有两个相同的字符 所以我们的起始 count=1.

进入 循环对比。因为我们是跟前一个字符作比较,所以我们这里 j=1。(稍后讲解与后一个字符比较,差别不是很大)

如果这个字符 和前一个字符一致

chj==chj-1

那么count++;

当这个字符和前一个字符不一致的时候,那么此时判断 count 和 maxcount的大小

如果 count> maxcount 那么 maxcount=count;

因为此时这个字符和前一个字符不同,所以我们统计的是上一个字符的个数。

则 maxchar = chj-1,

if(count > maxcount){

maxcount=count;

maxchar=chj-1;

}

这里是 j从零开始比较它下一个数字的代码

做完这些以后 我们此时 遇见不一样的字符了。

所以我们的 count 要更新为 1;

count=1;

接下来是第二部分的代码

for(int i=0;i<n;i++){

scanf("%s",ch);

int maxcount=0;

int maxchar=ch0;

int count=1;

for(int j=1;j<len;j++){

if(chj==chj-1){

count++;

} else{

if(count>maxcount){

maxcount=count;

maxchar=chj-1;

}

count=1;

}

}

是不是以为到这里就结束了。

不是的。

当时我自己做的时候,也认为结束了。

但是我画一个图,你们肯定就知道为什么了

因为我们的算法是遇到不一样的字符去统计上一个的字符的count.并与maxcount做比较。

所以当我们遇到最后一个不一样的字符以后,最后这一串相连续的字符,我们没有统计到

所以我们要再统计一次。

才完成我们的题目

然后输出就可以了

if(count>maxcount){

maxcount=count;

maxchar=chlen-1;

}

printf("%c %d\n",maxchar,maxcount);

}

return 0;

}

如果你觉得作者的思路还行的话,不妨给小白作者留下一个点赞吧。

感谢您的阅读

接下来是完整代码

#include<stdio.h>

#include<string.h>

int main(){

int n;

char ch205;

scanf("%d",&n);

for(int i=0;i<n;i++){

scanf("%s",ch);

int len=strlen(ch);

if(chlen-1=='\n'){

chlen-1='\0';

}

int maxcount=0;

int maxchar=ch0;

int count=1;

for(int j=1;j<len;j++){

if(chj==chj-1){

count++;

} else{

if(count>maxcount){

maxcount=count;

maxchar=chj-1;

}

count=1;

}

}

if(count>maxcount){

maxcount=count;

maxchar=chlen-1;

}

printf("%c %d\n",maxchar,maxcount);

}

return 0;

}

相关推荐
扶风ff4 分钟前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
yi01112 分钟前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
Zwawa18 分钟前
把 AO 接回来:黑线和白底之间到底差了多少
c语言·单片机·嵌入式
-dzk-27 分钟前
【多维动态规划】LC 1143.最长公共子序列
算法·动态规划
C++ 老炮儿的技术栈32 分钟前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c
lvqinglou35 分钟前
学习Sql-part1 for婷姐
sql·学习·性能优化
Omics Pro42 分钟前
全新可重分析!代谢组质谱专用
数据库·人工智能·算法·机器学习·自然语言处理
Nebula_g43 分钟前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈
一只废狗狗狗狗狗狗狗狗狗44 分钟前
Network架构1——卷积神经网络CNN
人工智能·算法·cnn
是希燃亚1 小时前
AI Agent 的未来,可能不是更强,而是更简单
算法·架构