题目描述:
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!
样例输入
abcd12345ed125ss123058789
abcd12345ss54761
样例输出
输出123058789,函数返回值9
输出54761,函数返回值5
接口说明
函数原型:
unsignedint Continumax(char** pOutputstr, char* intputstr)
输入参数:
char* intputstr 输入字符串;
输出参数:
char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串;
返回值:
连续最长的数字串的长度
代码实现
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
//function
unsigned int Continumax(char** poutputstr,const char* pinputstr)
{
unsigned int str_len = strlen(pinputstr);
char* pContinuStr = new char[str_len+1];
unsigned int len_max = 0,len_cur = 0;
const char* pslow = pinputstr;
const char* pfast = pinputstr;
if(NULL == pinputstr)
{
strncpy(pContinuStr," ",str_len);
*poutputstr = pContinuStr;
return 0;
}
while(*pslow !='\0')
{
if(*pslow >='0' && *pslow <= '9')
{
while(*pfast >='0' && *pfast <= '9')
{
len_cur++;
pfast++;
}
if(len_cur>0 && len_max<len_cur)
{
memset(pContinuStr,'\0',str_len+1);
strncpy(pContinuStr,pslow,len_cur);
cout<<pContinuStr<<endl;
len_max = len_cur;
}
len_cur = 0;
pslow = pfast;
}
else
{
pslow++;
pfast++;
}
}
*poutputstr = pContinuStr;
return len_max;
}
//test
int main(void)
{
const char *pinputstr="abcd12345ed125ss123058789";
char *poutputstr = NULL;
unsigned int len = 0;
len = Continumax(&poutputstr,pinputstr);
cout<<"len="<<len<<" str="<<poutputstr<<endl;
system("pause");
delete [] poutputstr;
poutputstr = NULL;
return 0;
}
验证结果: