题目描写
请1个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后1个连续数字串;
注意:数字串只需要是数字组成的就能够,其实不要求顺序,比如数字串“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<algorithm>
//#include<cmath>
//#include<vector>
//#include<stack>
//#include<iomanip>
using namespace std;
/* 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回
函数原型:
unsigned int Continumax(char** pOutputstr, char* intputstr)
输入参数:
char* intputstr 输入字符串
输出参数:
char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应当返回空字符串
pOutputstr 指向的内存应当在函数内用malloc函数申请,由调用途负责释放
返回值:
连续最长的数字串的长度
*/
unsigned int Continumax(char** pOutputstr, char* intputstr)
{
if(pOutputstr==NULL || intputstr==NULL)return 0;
int i,k,counti,maxcount,starti,maxstart;
int slen=strlen(intputstr);
*pOutputstr=(char *)malloc(slen+1);
//cout<<slen<<endl;
k=0;
maxcount=0;
while(k<slen){
for(i=k;i<slen;i++)
{
if(intputstr[i]>='0' && intputstr[i]<='9')
{
starti=i;
break;
}
}
if(i==slen) break;
counti=0;
for(i=starti;i<slen;i++)
if(intputstr[i]>='0' && intputstr[i]<='9')
{
counti++;
}
else
{
if(maxcount<=counti)
{
maxcount=counti;
maxstart=starti;
}
break;
}
if(i==slen && maxcount<=counti)
{
maxcount=counti;
maxstart=starti;
break;
}
k=i;
}
//cout<<maxcount<<" "<<maxstart<<endl;
if(maxcount==0)
{
(*pOutputstr)[0]=0;
return 0;
}
for(i=maxstart;i<maxcount+maxstart;i++)
(*pOutputstr)[i-maxstart]=intputstr[i];
(*pOutputstr)[i-maxstart]=0;
//cout<<*pOutputstr<<endl;
return maxcount;
}
int main()
{
char *ss=NULL;
Continumax(&ss, "hgjfgjfgjh");//
return 0;
}