数据结构——算法之(024)(在字符串中找到连续最长的数字串,并把这个串的长度返回)

数据结构——算法之(024)(在字符串中找出连续最长的数字串,并把这个串的长度返回)

【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】

题目:

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,

outputstr所指的值为123456789

题目分析:

一、类似的题目很多,其实都是快慢指针的操作

(1)两个指针同时指向字符串头

(2)快慢指针同时循环,直到指向第一个数字为止

(3)快指针接着循环到下一个非数字的位置

(4)记录下当前数字串长度,和首位指针位置

算法实现:

#include <stdio.h>
#include <string.h>

int count_max_digit_str(char *output_str,char *input_str)
{
    char *fast = input_str;
    char *slow = input_str;

    int len = strlen(input_str);
    int i = 0, max_digit_len = 0, tmp = 0;
    for(; i<len; ++i)
    {
        if(input_str[i] < '0' || input_str[i] > '9')
        {
            fast++;
            slow++;
            continue;
        }

        fast++;
        if( *fast < '0' || *fast > '9')
        {
            tmp = fast - slow;
            if(tmp > max_digit_len)
            {
                max_digit_len = tmp;
                memcpy(output_str, slow, tmp);
            }
            tmp = 0;
            slow = fast;
        }
    }
    output_str[max_digit_len] = '\0';

    return max_digit_len;
}

int main(int argc, char *argv[])
{
    char re[128] = "";
    int max = count_max_digit_str(re, argv[1]);
    printf("%s--%d-->%s\n", argv[1], max, re);
}