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