#include <iostream> #include<vector> using namespace std; //按照正常逻辑来做就可以,用一个二维数组容器存储所有的数字子串 //依次处理每个字符,如果是数字则push到容器中,然后cnt+1 //如果重新遇到字母,则上个数字子串结束,可以进行cnt的判断,根据结果来决定是否存储子串下标 int main() { string s; cin>>s; s+=' ';//末尾加一个空字符便于判断结束 int len=s.size(); vector<vector<char>>s_vec(1);//每一行存储一个数字子串 int index=0;//每个数字子串的在容器中的行号 vector<int>line;//存储最长子串的行号 int cnt=0;//每个数字子串的长度 int maxlen=0;//记录最长数字子串的长度 bool flag=false;//记录当前状态 //依次处理每一个字符 for(int i=0; i<len+1; i++) { //根据标志位来判断是否要插入或者结束 //如果是数字则插入容器中 if(isdigit(s[i])) { s_vec[index].push_back(s[i]); cnt++; flag=true; } //不是数字并且当前的状态为true,说明上个数字子串结束了 else if(flag) { //如果子串长度是最大的则记录该子串的行号 if(cnt>maxlen) { maxlen=cnt; line.clear();//清空之前的记录 line.push_back(index);//添加新的记录 } else if(cnt==maxlen) { line.push_back(index);//插入同样为最长子串的行号 } cnt=0; index++;//准备存储下一个子串 s_vec.resize(index+1);//扩容以存放下一个数字子串 flag=false; } } //按照行号来输出 for(int i : line) { for(char c : s_vec[i]) cout<<c; } cout<<","<<maxlen; return 0; } // 64 位输出请用 printf("%lld")