Candy Li's Blog

寻找字符串中的最大连续数字串

题目: 实现函数 int maxContinuNum(const char*inputstr.char*outputstr)
功能:在以‘\0’结尾的字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。不能用strlen之类的库函数。

解题思想: 顺序遍历整个字符串,找出每个连续的数字串,每次找到一个后,与前一个进行比较,保留最长的连续数字串的起始地址和数字串的长度。初始状态是maxCount=0,maxBegin=NULL

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

//判断是否是字符
bool isDigital(const char ch)
{
     return (ch>='0' && ch<='9');
}
       
int maxContinueNum(const char* inputstr,char* outputstr)
{
    const char* preBegin = NULL;  //记录当前的数字串的地址
    const char* maxBegin = NULL;  //记录最长的数字串的起始地址
    int preCount = 0;       //记录当前数字串的长度
    int maxCount = 0;       //记录最大数字串的长度
    const char* str = inputstr;   //引入变量
    for(;*str != '\0';++str)
    {
        //当前长度每次找连续数字串的时候初始化为0
        preCount = 0;
        if(isDigital(*str))
        {
            preBegin = str; //起始地址
            preCount++;    
            //判断后面是否也是数字字符
            while(isDigital(*++str))
            {
               preCount++;
            }                        
        }
        //找出最大的连续字符串
        if(preCount > maxCount)
        {
           maxCount = preCount;
           maxBegin = preBegin;
        }
    }
    //将最大连续数字串保存到outputstr中
    for(int j=0;j<maxCount;++j)
       *(outputstr+j) = *(preBegin+j);
    return maxCount;
}

int main()
{
    //测试用例
    char *inputstr = "hello123world456789over1245664mm";
    char *outputstr = (char*)malloc(50);
    memset(outputstr,0,50);
    int count = maxContinueNum(inputstr,outputstr);
    printf("The longest digital string is: ");
    puts(outputstr);
    printf("The length is: %d\n",count);
    free(outputstr);
    system("pause");
    return  0;

posted on 2011-05-04 17:08  哩哩噜噜  阅读(2252)  评论(0)    收藏  举报

导航