当长度相同时,选取后面的子串
题目描述
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串; 注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL! 样例输入 abcd12345ed125ss123058789 abcd12345ss54761
样例输出 输出123058789,函数返回值9 输出54761,函数返回值5 |
#include <stdlib.h>
#include "oj.h"
#include <string>
using namespace std;
/* 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回
函数原型:
unsigned int Continumax(char** pOutputstr, char* intputstr)
输入参数:
char* intputstr 输入字符串
输出参数:
char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串
pOutputstr 指向的内存应该在函数内用malloc函数申请,由调用处负责释放
返回值:
连续最长的数字串的长度
*/
unsigned int Continumax(char** pOutputstr, char* intputstr)
{
if (intputstr == NULL) {
*pOutputstr = (char*)malloc(1); (
*pOutputstr)[0] = '\0';
return 0;
}
int len_max = 0;
const char *temp = intputstr;
const char *begin = NULL;//定义指向初始位置的指针,并给其赋值为null
while (*temp != '\0')
{
if (!isdigit(*temp))//如果不是数字的话,指针后移,循环继续
{
temp++;
continue;
}
//如果是数字的话
int len = 0;
const char *begin_temp = temp;//记录此刻数字串的初始位置
while (isdigit(*temp))//是数字的话后移并统计数字长度
{
temp++;
len++;
}
if (len>=len_max)
{
len_max = len;
begin = begin_temp;
}
}
if (len_max<=0) {
*pOutputstr = (char*)malloc(1); (
*pOutputstr)[0] = '\0';
return 0;
}
memcpy(*pOutputstr, begin, len_max);//复制最长数字串
return len_max;
}