思路:连续遍历每个字符,得到一个最大长度,并记住这个长度的初始位置,然后赋给新的字符串。
#include <stdio.h>
#include <stdlib.h>
void fun(char *str,char *newstr)
{
char *s=str;
char *snew=newstr;
char *temp,*final;
int count=0,maxlen=0;
while(*s!='\0')
{
if(*s>47 && *s<58)
{
for(temp=s;*s>47 && *s<58;s++)
{
count++;
}
}
else
s++;
if(maxlen<count)
{
maxlen=count;
count=0;
final=temp;
}
}
for(int i=0;i<maxlen;i++)
{
*snew=*final;
final++;
snew++;
}
*snew='\0';
printf("数字的个数为:%d\n",maxlen);
printf("数字为:%s\n",newstr);
}
void main()
{
char string[]="abcd1234dk456789322dkj13";
char *newstring=(char *)malloc(100);
fun(string,newstring);
}
还有类似面试题:把一个字符串中连续出现次数最多的一个字母组成的一个字符串输出来,连续出现哦。
#include <stdio.h>
#include <stdlib.h>
void fun(char *str,char *newstr)
{
char *s=str;
char *news=newstr;
char *temp,*final;
int count=0,maxlen=0;
char ch;
while(*s!='\0')
{
ch=*s;
temp=s;
while(*s==ch)
{
++s;
count++;
}
if(maxlen < count)
{
maxlen=count;
count=0;
final=temp;
}
}
for(int i=0;i<maxlen;i++)
{
*news=*final;
news++;
final++;
}
*news='\0';
printf("%s\n",newstr);
}
void main()
{
char *strout=(char *)malloc(100);
char *str="aabbbccccdfffff";
fun(str,strout);
}