数据结构——算法之(024)(在字符串中找到连续最长的数字串,并把这个串的长度返回)
数据结构——算法之(024)(在字符串中找出连续最长的数字串,并把这个串的长度返回)
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,
【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱: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); }