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


    要求:

    读入一个长度不超过256的字符串,例如“abc123defg123456789hjfs123456”。要求输出“123456789”

    思路:

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

    遍历完字符串后遍历容器中存储的长度最长的Value。

    具体代码如下:

    /************************************************************************/
    /* Project:			输出字符串中连续最长的数字串							*/
    /* Author:														*/
    /* Time:			2017/10/03											*/
    /* Description:		读入一个字符串str,输出字符串str中连续最长的数字串		*/
    /************************************************************************/
    
    #include "stdafx.h"
    #include <iostream>
    #include <ctype.h>
    #include <vector>
    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<DATA> 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 ///////////////////////////////
    

      

  • 相关阅读:
    poj_3923Ugly Windows
    背包问题九讲笔记_01背包
    素数环
    全排列的STL实现
    [1424] 金克拉与贪吃蛇的故事
    hdoj_1548A strange lift
    iBATIS缓存配置详解
    jQuery的一些特性和用法:
    当iBATIS出项某个列不存在的问题
    当iBATIS出项某个列不存在的问题
  • 原文地址:https://www.cnblogs.com/LandyTan/p/7636136.html
Copyright © 2020-2023  润新知