您的位置:首页 > 其它

在字符串中找出连续最长的数字串

2015-12-30 15:24 344 查看
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;

注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!

样例输入

abcd12345ed125ss123058789
abcd12345ss54761

样例输出

输出123058789,函数返回值9

输出54761,函数返回值5

接口说明

函数原型:

unsignedint Continumax(char** pOutputstr, char* intputstr)

输入参数:

char* intputstr 输入字符串;

输出参数:

char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串;

返回值:

连续最长的数字串的长度

代码:

[cpp] view
plaincopy

#include <stdlib.h>

#include "oj.h"

#include <cstring>

/* 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回

函数原型:

unsigned int Continumax(char** pOutputstr, char* intputstr)

输入参数:

char* intputstr 输入字符串

输出参数:

char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串

pOutputstr 指向的内存应该在函数内用malloc函数申请,由调用处负责释放

返回值:

连续最长的数字串的长度

*/

unsigned int Continumax(char** pOutputstr, char* intputstr)

{

char *pTemp =new char[10];

memset(pTemp,'\0',10);

char temp[10] = {""};

strncpy_s(pTemp,10, temp,10);

if (NULL == intputstr)

{

*pOutputstr = pTemp;

return 0;

}

size_t strLen = strlen(intputstr);

char* pMaxNum = new char[strLen+1];

size_t numLen = 0,maxNumLen = 0;

size_t startNum=0;

for(size_t i=0;i<strLen;++i)

{

if (intputstr[i]>='0' && intputstr[i]<='9')

{

startNum = i;

numLen = 0;

while(i<strLen && intputstr[i]>='0' && intputstr[i]<='9')

{

++numLen;

++i;

}

if (numLen!=0 && maxNumLen<=numLen)

{

memset(pMaxNum,'\0',strLen+1);

strncpy_s(pMaxNum,strLen+1, intputstr+startNum,numLen);

maxNumLen = numLen;

}

}

}

if (maxNumLen == 0)

{

delete [] pMaxNum;

pMaxNum = NULL;

*pOutputstr = pTemp;

}

else

{

*pOutputstr = pMaxNum;

}

return (unsigned int)maxNumLen;

}

测试用例:

[cpp] view
plaincopy

void CExampleTest::TestCase01()

{

char* intputstr = "abcd12345ed125ss123456789" ;

char *pOutputstr = NULL;

unsigned int nLength = Continumax(&pOutputstr, intputstr);

CPPUNIT_ASSERT(nLength == 9);

CPPUNIT_ASSERT((pOutputstr != NULL) &&
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: