您的位置:首页 > 编程语言 > PHP开发

算法习题25:写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

2013-10-20 16:01 537 查看
来自:http://bbs.csdn.net/topics/350118968

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,
outputstr所指的值为123456789

-------------------------------------------------------------

郁闷了那道拿纸牌猜纸牌的题目,现在终于遇到一题简单点的了,

这题目应该在笔试中是经常会出现的,面试就不太可能了(确实难度较低)

这里有几点注意下:

1、用cin和gets区别  cin把空格当成了字符串的终止输入符号,所以如果输入

sf233 2342 djf3

用cin 给出的是3

而用gets()给出的是4

这里需要注意

2、如果这里给的 outputstr内存不够容纳数字序列怎么办?

暂时就想到这些

说下这题思路把,就是挨个判断是否是数字,记录下最长的长度即可,时间复杂度O(n)

其实记录start或者end只需要记录一个就好 另一个可以通过max来计算得到

//============================================================================
// Name        : ContinueMax.cpp
// Author      : YLF
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

#define MAX 100

int continumax(char *outputstr,char *intputstr);

int main() {
char arr[MAX];
memset(arr,0,sizeof(arr));
//	cin>>arr;
gets(arr);

char out[MAX];
memset(out,0,sizeof(out));
int len = continumax(out, arr);
cout<<len<<endl<<out;
return 0;
}

int continumax(char *outputstr,char *intputstr){
int start=0, end=0, max=0;
int tempStart=0, tempMax=0;
int length = strlen(intputstr);
int cur=0;
for(;cur<length;cur++){
char c = intputstr[cur];
if(c>='0' && c<='9'){
if(tempMax == 0){
tempStart=cur;
}
tempMax++;
}else{
//如果出现非数字的,需要比较下这时候的tempMax是否比之前的还大
if(tempMax>max){
start = tempStart;
end = cur;
max = tempMax;

tempMax=0;
}
}
}

if(tempMax>max){
start = tempStart;
end = cur;
max = tempMax;

tempMax=0;
}

for(cur=0;cur<end-start;cur++)
outputstr[cur]= intputstr[cur+start];
return max;

}


输出

sf23 3423sf23423423
8
23423423
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐