int maxContinuNum(const char*inputstr.char*outputstr)
功能:
在以‘\0’结尾的字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参
数outputstr所指内存。不能用strlen之类的库函数。
#include<iostream> #include<assert.h> using namespace std; bool isdigital(char p){ if(p>='0'&&p<='9') return true; return false; } int maxContinuNum(const char* inputstr,char* outputstr){ int len=0;//每次的连续数 int maxlen=0;//最大的连续数 char* start=NULL;//记录最大连续数指针开始的位置 if(*inputstr=='\0') return 0; while(*inputstr!='\0'){ while(*inputstr!=0&&isdigital(*inputstr)){ len++; inputstr++; } if(len>maxlen){ maxlen=len; start=(char*)(inputstr-maxlen); } len=0; if(*inputstr!='\0') inputstr++; } for(int i=0;i<maxlen;i++) *(outputstr++)=*(start++); cout<<outputstr<<endl; return maxlen; } int main(){ char *str="1234asdf234211jjl111122223312j"; char *str1=(char*)malloc(100*sizeof(char)); memset(str1,0,100);//如果没有这个操作,str1字符串就找不到正确的结束符,输出会出现乱码 int str_len; str_len=maxContinuNum(str,str1); cout<<str_len<<endl <<str1<<endl; system("pause"); return 1; }
另一种好的解决方法:
#include <stdio.h> int Findmaxlen(char *input,char *output); void main() { char input[]="abc123def123456ee123456789dd"; char output[50]={0}; int maxlen; maxlen=Findmaxlen(input,output); printf("the str %s\n",output); printf("the maxlen is %d \n",maxlen);} int Findmaxlen(char *input,char *output) {char *in=input,*out=output,*temp,*final; int count=0,maxlen=0,i; while(*in!='\0') { if(*in>='0'&&*in<='9') { count=0; for(temp=in;*in>='0'&&*in<='9';in++) count++; if(maxlen<count) { maxlen=count; final=temp; }//if }//if in++; }//while for(i=0;i<maxlen;i++) *out++=*final++; *out='\0'; return maxlen; }