读入一个字符串str,输出字符串str中连续最长的数字串

要求:
【读入一个字符串str,输出字符串str中连续最长的数字串】读入一个长度不超过256的字符串,例如“abc123defg123456789hjfs123456”。要求输出“123456789”

思路:
遍历字符串,如果是数字串则计算往后一共有多少个数字,计算出数字的开头与长度添加的容器中,往后继续读取;
遍历完字符串后遍历容器中存储的长度最长的Value。

具体代码如下:

/************************************************************************/ /* Project:输出字符串中连续最长的数字串*/ /* Author:*/ /* Time:2017/10/03*/ /* Description:读入一个字符串str,输出字符串str中连续最长的数字串*/ /************************************************************************/#include "stdafx.h" #include #include #include using namespace std; char* GetLongestNumber(char* pBuf, size_t nSize, char** pNum); //int _tmain(int argc, _TCHAR* argv[]) { char* pBuf = new char[128]; memset(pBuf, 0, sizeof(char)* 128); cin.getline(pBuf, 128); char* pNum = NULL; GetLongestNumber(pBuf, 128, &pNum); if (pNum) cout << "The longest number is:" << pNum << endl; else cout << "Cannot find Longest number string." << endl; delete[] pBuf; pBuf = NULL; system("pause"); return 0; }//typedef struct data { char* p; int nLength; data() { p = NULL; nLength = 0; } }DATA, *LPDATA; //char* GetLongestNumber(char* pBuf, size_t nSize, char** pNum) { if (!pBuf || nSize <= 0 || !pNum)return NULL; vector vect; DATA da; // 遍历字符串 for (int i = 0; i < strlen(pBuf); i++) { if (isdigit(*(pBuf + i))) { // 往后查找数字字符 int nCount = i; while (isdigit(*(pBuf + nCount))) nCount++; da.p = pBuf + (i - 1); da.nLength = nCount - (i - 1); vect.push_back(da); // 插入相关信息到vector中 da.p = NULL; da.nLength = 0; i = nCount; } i++; } // 计算Vector中.nLength最大的元素 auto it = vect.end() -1; DATA Max = *it; it--; while (it >= vect.begin()) { if (it->nLength > Max.nLength) Max = *it; if(it != vect.begin())it--; else break; } // 得到最长的数字串 *pNum = new char[Max.nLength + 1]; memset(*pNum, 0, sizeof(char)* Max.nLength + 1); memcpy(*pNum, Max.p, Max.nLength); return *pNum; } End of File ///


转载于:https://www.cnblogs.com/LandyTan/p/7636136.html

    推荐阅读