【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱: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);
}