标签:
题目描述
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“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; }
标签:
原文地址:http://blog.csdn.net/wljwsj/article/details/45369105