算法学习十一----连续最长的数字串

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,
outputstr所指的值为123456789
算法思路如下:
1、逐个字符遍历该字符串,当还没有到达字符串的结束时,判断当前字符是否是数字,若是数字,则进行第二步,否则继续遍历
2、继续判断下一字符,直到当前字符不是数字,并记录下数字字符的个数,与之前的数字字符做比较,如果当前数字个数较多,则更新最大值

算法伪代码如下:

while not to the end
     reset tempSum
     if '0'<= *c <= '9'
          then while not to the end and '0' <= *c <= '9'
               add tempSum

               go to next char
     if tempSum > maxCount
          then update maxCount
     go to next char

C++实现

int ContinuMaxNumStr(const char *c)
{
    int maxCount = 0;
    int tempSum = 0;

    //while not to the end
    while(*c != '\0')
    {
        //reset tempSum
        tempSum = 0;
        //if '0'<= *c <= '9'
        if(*c>='0' && *c<='9')
        {
            //then while not to the end and '0' <= *c <= '9'
            while((*c != '\0') && (*c>='0' && *c<='9'))
            {
                //add tempSum
                ++tempSum;

                //go to next char
                ++c;
            }
            //if tempSum > maxCount
            if(tempSum > maxCount)
            {
                //then update maxCount
                maxCount = tempSum;
            }
        }
        //go to next char
        ++c;
    }

    return maxCount;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值