/*
* 在字符串中找出连续最长的数字串
* 描述: 样例输出
* 输出123058789,函数返回值9
* 输出54761,函数返回值5
* 接口说明
* 函数原型:
* unsignedint Continumax(char** pOutputstr, char* intputstr)
* 输入参数:
* char* intputstr 输入字符串;
* 输出参数:
* char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串;
* 返回值:
* 连续最长的数字串的长度
* 知识点: 位运算
* 题目来源: 内部整理
* 练习阶段: 初级
* 运行时间限制: 10Sec
* 内存限制: 128MByte
* 输入:
* 输入一个字符串。
* 输出:
* 输出字符串中最长的数字字符串和它的长度。
* 如果数字字符串为空,则只输出0
* 如 input: dadfsaf output:0
* 样例输入: abcd12345ed125ss123058789
* 样例输出: 123058789,9
*/
#include <iostream>
#include <string>
#include <vector>
#include <string.h>
#include <map>
using namespace std;
void Input(std::string &str);
unsigned int Continumax(char** pOutputstr, char* intputstr);
struct MyPairs
{
char digit;
int position;
};
int main()
{
std::string InputString;
char* intputstr;
char* pOutputstr = NULL;
Input(InputString);
intputstr = const_cast<char*>(InputString.c_str());
int flag = static_cast<int>(Continumax(&pOutputstr,intputstr));
if(flag>0)
{
std::cout << pOutputstr << ',' << flag<<endl;
delete[] pOutputstr;
pOutputstr = NULL;
}
else if(flag==0)
{
std::cout << flag << endl;
}
else
{
return -1;
}
system("pause");
return 0;
}
void Input(std::string &str)
{
getline(std::cin,str,'\n');
return;
}
unsigned int Continumax(char** pOutputstr, char* intputstr)
{
vector<MyPairs> DigitSubString;
vector<vector<MyPairs>> AllDigitSubString;
vector<vector<MyPairs>>::iterator iter;
int size = strlen(const_cast<const char*>(intputstr));
char c;
int pre = -1;
/* 输入字符串为空字符串 */
if(size==0)
{
char* NullStr = "";
*pOutputstr = NullStr;
return -1;
}
/* 将所有的数字字符及其序号存入vector中 */
for(int i=0;i<size;i++)
{
c = intputstr[i];
if((c>=48) && (c<=57))
{
/* 数字字符连续 */
if(i==(pre+1))
{
MyPairs pp;
pp.digit = c;
pp.position = i;
DigitSubString.push_back(pp);
pre= i;
}
else
{
/* vector不为空 */
if(!(DigitSubString.empty()))
{
AllDigitSubString.push_back(DigitSubString);
}
DigitSubString.clear(); /* 清空vector */
/* 再将该数字字符插入新的vector中 */
MyPairs pp;
pp.digit = c;
pp.position = i;
DigitSubString.push_back(pp);
pre = i;
}
}
}
AllDigitSubString.push_back(DigitSubString);
int maxlen = 0;
int vector_num = -1;
int ipp = 0;
/* 找出最长数字字符串所在的vector */
for(iter=AllDigitSubString.begin();iter!=AllDigitSubString.end();iter++)
{
int LL = iter->size();
if(LL>maxlen)
{
maxlen = LL;
vector_num = ipp;
}
ipp++;
}
/* 连续最长的数字字符串长度为0 */
if(maxlen==0)
{
char* NullStr = "";
*pOutputstr = NullStr;
return 0;
}
vector<MyPairs> MaxVector = AllDigitSubString[vector_num];
vector<MyPairs>::iterator Maxiter;
int ppp =0;
char* substr = new char[maxlen+1];
for(Maxiter=MaxVector.begin();Maxiter!=MaxVector.end();Maxiter++)
{
char ccc = intputstr[Maxiter->position];
substr[ppp] = ccc;
ppp++;
}
char kp = '\0';
substr[ppp] = kp;
*pOutputstr = substr;
return maxlen;
}