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

来源:互联网 发布:sql查询怎么指定别名 编辑:程序博客网 时间:2024/06/05 14:41
题目描述

请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!


样例输入

abcd12345ed125ss123058789

abcd12345ss54761

样例输出

输出123058789,函数返回值9
输出54761,函数返回值5
 
接口说明

函数原型:
   unsignedint Continumax(char** pOutputstr,  char* intputstr)

输入参数:
   char* intputstr  输入字符串;

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

返回值:

  连续最长的数字串的长度


代码:

[cpp] view plain copy
  1. #include <stdlib.h>  
  2. #include "oj.h"  
  3. #include <cstring>    
  4.   
  5. /* 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回 
  6. 函数原型: 
  7.    unsigned int Continumax(char** pOutputstr,  char* intputstr) 
  8. 输入参数: 
  9.    char* intputstr  输入字符串 
  10. 输出参数: 
  11.    char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串 
  12.    pOutputstr 指向的内存应该在函数内用malloc函数申请,由调用处负责释放 
  13.  
  14. 返回值: 
  15.   连续最长的数字串的长度 
  16.  
  17.  */  
  18. unsigned int Continumax(char** pOutputstr,  char* intputstr)  
  19. {  
  20.     char *pTemp =new char[10];  
  21.     memset(pTemp,'\0',10);  
  22.     char temp[10] = {""};  
  23.     strncpy_s(pTemp,10, temp,10);  
  24.   
  25.     if (NULL == intputstr)  
  26.     {  
  27.         *pOutputstr  = pTemp;  
  28.         return 0;  
  29.     }  
  30.     size_t strLen = strlen(intputstr);  
  31.     char* pMaxNum = new char[strLen+1];  
  32.     size_t numLen = 0,maxNumLen = 0;  
  33.     size_t startNum=0;  
  34.     for(size_t i=0;i<strLen;++i)  
  35.     {  
  36.         if (intputstr[i]>='0' && intputstr[i]<='9')  
  37.         {  
  38.             startNum = i;  
  39.             numLen = 0;  
  40.             while(i<strLen && intputstr[i]>='0' && intputstr[i]<='9')  
  41.             {  
  42.                 ++numLen;  
  43.                 ++i;  
  44.             }  
  45.   
  46.             if (numLen!=0 && maxNumLen<=numLen)  
  47.             {  
  48.                 memset(pMaxNum,'\0',strLen+1);  
  49.                 strncpy_s(pMaxNum,strLen+1, intputstr+startNum,numLen);  
  50.                 maxNumLen = numLen;  
  51.             }  
  52.         }  
  53.     }  
  54.   
  55.     if (maxNumLen == 0)  
  56.     {  
  57.         delete [] pMaxNum;  
  58.         pMaxNum = NULL;   
  59.         *pOutputstr = pTemp;  
  60.     }  
  61.     else  
  62.     {  
  63.         *pOutputstr = pMaxNum;  
  64.     }  
  65.   
  66.     return (unsigned int)maxNumLen;  
  67. }  


测试用例:

[cpp] view plain copy
  1. void CExampleTest::TestCase01()  
  2. {  
  3.     char* intputstr = "abcd12345ed125ss123456789" ;  
  4.     char *pOutputstr = NULL;  
  5.     unsigned int nLength = Continumax(&pOutputstr, intputstr);  
  6.     CPPUNIT_ASSERT(nLength == 9);  
  7.     CPPUNIT_ASSERT((pOutputstr != NULL) && (strcmp(pOutputstr,"123456789") == 0));  
  8.     free(pOutputstr);  
  9. }  

原创粉丝点击