您的位置:首页 > 职场人生

百度面试题——最大连续数字串问题

2012-09-10 11:21 281 查看
问题描述:

写一个函数,它的原形是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: