题目:
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr 所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,outputstr 所指的值为123456789
思路一:
这道题目比较简单,遍历一遍就可以,遍历的过程中不断把数字串的最大长度和位置保存下来就可以了.
代码如下:
/*==============================
Copyright by yuucyf. 2011.08.10
===============================*/
#include "stdafx.h"
#include <assert.h>
#include <iostream>
using namespace std;
typedef struct tagPosInfo
{
int i32Pos;
int i32Len;
tagPosInfo()
{
i32Pos = -1;
i32Len = 0;
}
}S_PosInfo;
int continumax(char *outputstr,char *intputstr)
{
assert(outputstr);
assert(intputstr);
S_PosInfo sMaxPosInfo, sTempPosInfo;
int i32Lenght = _tcslen(outputstr);
for (int i32I = 0; i32I < i32Lenght; i32I++)
{
if (outputstr[i32I] >= '0' && outputstr[i32I] <= '9')
{
if (sTempPosInfo.i32Pos == -1)
sTempPosInfo.i32Pos = i32I;
sTempPosInfo.i32Len++;
}
else
{
if (sTempPosInfo.i32Len > sMaxPosInfo.i32Len)
{
sMaxPosInfo = sTempPosInfo;
}
sTempPosInfo.i32Len = 0;
sTempPosInfo.i32Pos = -1;
}
}
if (sTempPosInfo.i32Len > sMaxPosInfo.i32Len)
{
sMaxPosInfo = sTempPosInfo;
}
if (sMaxPosInfo.i32Len <= 0)
{
return 0;
}
else
{
strncpy_s(intputstr, sMaxPosInfo.i32Len + 1, outputstr+sMaxPosInfo.i32Pos, sMaxPosInfo.i32Len);
return sMaxPosInfo.i32Len;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char aszSrcStr[] = "abcd12345ed125ss123456789";
char aszDestStr[0x20] = {0};
cout << "输入字串为:" << aszSrcStr << endl;
int i32NumStrLen = continumax(aszSrcStr, aszDestStr);
cout << "输出字串为:" << aszDestStr << " 长度为:" << i32NumStrLen;
return 0;
}