代码如下:
/*******************************************************************************************
*功能:计算一个字符串中最大的子串的长度,并将它返回。(子串是这样定义的连续的数字或者字母)
*如“abcdefg123456789asdfgagfafg”,其中最大子串是“asdfgagfafg”。
*作者:lml 时间:2020年4月15日20:29:16
********************************************************************************************/
#include <stdio.h>
int do_maxstring(char *str,char *o_buf)
{
int i=0,j=0,n=0,m=0;
int max_h=0,max_n=0,ori=0;
while(*(str+i) != '\0')
{
//判断数字字符
if(*(str+i)>='0' && *(str+i)<='9'){
n++;
m=0;
max_n=n;
if(max_n>max_h){//当前的大就计入历史变量
max_h=max_n;
ori=i-max_h+1;//同时记录下标
}
}
//判断字母字符
else if((*(str+i)>='a' && *(str+i)<='z') || (*(str+i)>='A' && *(str+i)<='Z'))
{
m++;
n=0;
max_n=m;
if(max_n>max_h){
max_h=max_n;
ori=i-max_h+1;
}
}
else{
m=0;
n=0;
}
i++;
}
for(j=0;j<max_h;j++)
{
//输出最长的子串
*(o_buf+j) = *(str+ori+j);
}
printf("max:%d \n",max_h);
return 0;
}
int main(int argc, const char *argv[])
{
char buf[100]="";
char bbuf[100]="";
printf("请输入:");
fflush(stdout);//刷新缓冲区,输出到屏幕
scanf("%s",buf);
getchar();
do_maxstring(buf,bbuf);
printf("maxstr:%s\n",bbuf);
return 0;
}
结束。