您的位置:首页 > 理论基础 > 数据结构算法

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

2014-06-04 15:47 423 查看
【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱: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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐