在字符串中找出连续最长的数字串
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) &&
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“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) &&
相关文章推荐
- 不可错过的javascript迷你库
- Appium简明教程
- WPF VLC客户端和SDK的简单应用
- 实验四 主存空间的分配和回收模拟
- 关于微信支付,支付宝支付与银联支付的异步消息状态
- Git安装配置
- C++ 学习(派生类到基类准还的可访问性)
- Activity与Fragment通信方式
- Win7上Git安装及配置过程
- 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法
- ios使用 KVC 修改textField的placeholder的字体颜色和大小
- Redis+twemproxy(nutcracker)实现Redis多集群方案
- iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT(转)
- iOS UITableView 和 UICollectionView 设置默认选中状态
- Android 线程池详解
- java notify()和notifyall()的区别&wait()方法的使用
- BZOJ 3673 可持久化并查集 可持久化线段树
- unCheck Size Classes requires Auto Layout 详解
- Android中的Service初探
- 导航栏随表视图滑动更改透明度