一道C语言面试题——求最大连续数字子串

#include "stdafx.h"
   
int GetSubString(char *strSource, char *strResult)
{
    int iTmp=0, iHead=0, iMax=0;
    for(int Index=0, iLen=0; strSource[Index] != '/0'; Index++)
    {
        // 该字符是数字,前一个字符也是数字,并且:该数字 = 前一个数字 + 1
        if(strSource[Index] >= '0' && strSource[Index] <= '9' && strSource[Index-1] >= '0'
                && strSource[Index] == strSource[Index-1]+1)
            iLen++;             // 连续数字的长度增1       
        else                    // 出现字符或不连续数字
        {
            // 检查当前得到的连续数字长度是否大于以往得到的最大长度
            if(iLen > iMax)
            {
                iMax = iLen;     // 保存最大长度值
                iHead = iTmp;    // 保存最大连续串的起始位置
            }
        
            // 该字符是数字,但数字不连续
            if(strSource[Index] >= '0' && strSource[Index] <= '9')
            {
                iTmp = Index;    // 重新设定连续数字的起始位置
                iLen = 1;        // 初始新的连续数字长度为1
            }
        }   
    }
   
    // 将原始字符串中最长的连续数字串赋值给结果串
    for(iTmp=0 ; iTmp < iMax; iTmp++)
        strResult[iTmp] = strSource[iHead++];
    strResult[iTmp]='/0';

    // 返回连续数字的最大长度
    return iMax;
}

int main(int argc, char* argv[])
{
    char strSource[]="ads34EFsdsl456789DDasFdiel3456ld345678AAA", strResult[sizeof(strSource)];
    printf("Len=%d, strResult=%s /nstrSource=%s/n", GetSubString(strSource, strResult), strResult, strSource);
    return getchar();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值