<pre name="code" class="cpp">/**
*<span style="white-space:pre"> </span>题目描述
*
* 请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
*
* <span style="white-space:pre"> </span>注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,
* 如果没有数字,则返回空字符串(“”)而不是NULL!
*
* 样例输入
* abcd12345ed125ss123058789
* abcd12345ss54761
*
* 样例输出
* 输出123058789,函数返回值9
* 输出54761,函数返回值5
*
* 接口说明
* <span style="white-space:pre"> </span>函数原型:
* <span style="white-space:pre"> </span>unsignedint Continumax(char** pOutputstr, char* intputstr)
*
* 输入参数:
* char* intputstr 输入字符串;
*
* 输出参数:
* char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串;
* pOutputstr 指向的内存应该在函数内用malloc函数申请,由调用处负责释放
*
* 返回值:
* 连续最长的数字串的长度
*/
#include <cctype>
#include <string.h>
unsigned int Continumax(char** pOutputstr, char* intputstr)
{
int ret = 0;
int countNum = 0;
char *iter = intputstr;
char *tempHead = NULL;
char *tempRet = NULL;
bool bNum = false; //是否是数字
while(*iter != NULL)
{
if (isdigit(*iter))
{
if (!bNum)
{
bNum = true;
tempHead = iter;
}
countNum++;
}
else
{
bNum = false;
if (ret <= countNum)
{
ret = countNum;
tempRet = tempHead;
}
countNum = 0;
}
iter++;
}
/* 最后以数字结尾. */
if (ret <= countNum)
{
ret = countNum;
tempRet = tempHead;
}
if (ret == 0)
{
*pOutputstr = "";
return ret;
}
char *pOutputTemp = (char*)malloc(ret + 1);
if (pOutputTemp == NULL)
{
return 0;
}
strncpy(pOutputTemp, tempRet, ret);
pOutputTemp[ret] = '\0';
*pOutputstr = pOutputTemp;
return ret;
}