`
蒙面考拉
  • 浏览: 156054 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

找出连续最长的数字串(百度面试)

 
阅读更多

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;
} 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics