http://blog.csdn.net/yuucyf/article/details/6676568
题目:
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr 所指内存。 例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,outputstr 所指的值为123456789
思路一:
这道题目比较简单,遍历一遍就可以,遍历的过程中不断把数字串的最大长度和位置保存下来就可以了.
代码如下:
-
-
-
- #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;
- }
|