在字符串中找出连续最长的数字串

描述:
请在一个字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!
样例输入
abcd12345ed125ss123058789
abcd12345ss54761
样例输出
输出123058789,函数返回值9

输出54761,函数返回值5


分析:
遍历字符串,对每段连续数字进行统计,当行进到非数字时,将上一段的长度与目前最长长度进行比较,若大于当前最长长度,则将最长长度设置为上一段长度,将最长数字结果设置为上一串数字。可以用临时数组和结果数组进行操作,也可以纯指针操作。


代码如下:

使用临时数组和结果数组进行操作:
unsigned int Continumax(char** pOutputstr, char* intputstr)
{
char* result = (char*) malloc (sizeof(char)*1000);
memset(result,0,sizeof(result));

char* temp = (char*) malloc (sizeof(char)*1000);
memset(temp,0,sizeof(temp));

if (intputstr == "" || intputstr == NULL)
{
result[0] = '\0';
*pOutputstr = result;
return 0;
}

int count = 0;
int tempc = 0;
for (int i=0;i<strlen(intputstr);i++)
{
if (intpustr[i]>='0' && intpustr[i] <='9')
{
temp[count] = intputstr[i];
count++;
}
else
{
if (count >= tempc)
{
memset(result,0,sizeof(result));
tempc = count;
temp[count] = '\0';
for (int j=0; j<count; j++)
{
result[j] = temp[j];
}
result[count] = '\0';
}
count = 0;
memset(temp,0,sizeof(temp));
}
}
if (temp != "")
{
if (count >= tempc)
{
memset(result,0,sizeof(result));
tempc = count;
temp[count] = '\0';
for (int j=0; j<count; j++)
{
result[j] = temp[j];
}
result[count] = '\0';
}
count = 0;
memset(temp,0,sizeof(temp));
}
if (tempc == 0)
{
result[0] = '\0';
*pOutpustr = result;
return 0;
}
else
{
*pOutputstr = result;
return tempc;
}
}


纯指针操作:
#include <iostream>
using namespace std;

int continumax (char* &outputstr, char *inputstr)//要是改变outputstr并返回值,需要用引用
{
int len = 0;
int maxlen = 0;
char *p = inputstr;
char *q;
while (*p != '\0')
{
while ((*p < '0' || *p > '9') && *p != '\0')
{
p++;
}
len = 0;
if (*p != '\0')
{
q = p;
}
while (*p >= '0' && *p <= '9' && *p != '\0')
{
len++;
p++;
}
if (len > maxlen)
{
outputstr = q;
maxlen = len;
}
}
return maxlen;
}

void main()
{
char* input = "abcd1234ed125ss123456789dkjakjdka";
char* output;
int k = continumax(output, input);
cout << "最长数字串的长度: "<<k<<endl;
for (int i=0; i<k; i++)
{
cout<<output[i]<<" ";
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值