现在的位置: 首页 > 综合 > 正文

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

2013年10月01日 ⁄ 综合 ⁄ 共 1640字 ⁄ 字号 评论关闭

来自: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

抱歉!评论已关闭.