问题描述:
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr 所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr 所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,
outputstr 所指的值为123456789
解题思路:
该问题相对简单,找出连续的数字串不是什么难事,关键在于怎样找出最大的数字串,这里,我们可以定义一些辅助变量:
max_len:保存当前所得的最大连续数字串个数。
pb:保存当前最大数字串的起始位置(指向inputstr的指针)。
pe:保存当前最大数字串的结束位置(指向inputstr的指针)。
我们在查找到某一段数字串的时候,就将该段数字串的长度和max_len进行比较,如果更大则分别对max_len,pbegin, pend分别赋值。
源码如下:
bool is_number(char ch)
{
return ch >= '0' && ch <= '9';
}
int max_continue_num(char *outputstr,char *inputstr)
{
int max_len;
char *pb, *pe, *pbegin, *pend, *p;
p = inputstr;
pb = pe = pbegin = pend = NULL;
max_len = 0;
while(*p) {
if(is_number(*p)) {
if(NULL == pbegin) {
pbegin = pend = p;
}
pend++;
} else if(NULL != pbegin){
int len = (int)(pend - pbegin);
if(len > max_len) {
max_len = len;
pb = pbegin;
pe = pend;
}
pbegin = pend = NULL;
}
p++;
}
if(pbegin) {
int len = (int)(pend - pbegin);
if(len > max_len) {
max_len = len;
pb = pbegin;
pe = pend;
}
}
if(max_len) {
while(pb != pe) {
*outputstr++ = *pb++;
}
}
return max_len;
}
int main(void)
{
char inputstr[] = "abcd12345ed125ss123456789";
char outputstr[100] = {""};
cout<<max_continue_num(outputstr, inputstr)<<endl;
cout<<outputstr<<endl;
getchar();
return 0;
}