这道题,主要分为3各版块:
第一步就是把原始的长字符串当中,把每一个由数字组成的子段给它截出来,这样的话就会得到很多个子段,那每一个子段就是一个string,然后把这些string放在一个数组里,这样第一步就完成了。
第二部现在面对的问题就是有一个字符串string组成的一个数组,那么这个数组当中的string,可能是有前导零的,所以第二步就是把这个string中的前导零清理掉(可以用erase或substr),然后对于每个string,你把它前导零去掉,然后再放回去,这样把整个数组处理一遍,这是第二步,当第二步做完之后,就会得到了一个由string组成的数组,并且这个数组里所有的东西都不含前导零。
第三步就是把现在这个数组去做一个排序,这个数组排序的时候,不能直接sort,得用cmp。不然就错了,按字典序去拍的话100就小于99。
先定义一个vector<string> v;
第一步,遍历string时,看s[i]他是不是数字,也就是
s[i]>='0'&&s[i]<='9'
然后在把另一个string a+s[i]
如果不是数字,那把a装进vector里,然后再把a清空
for(int i=0;i<=s.size();i++){
if(s[i]>='0'&&s[i]<='9') a=a+s[i];
else if(a!=""){
v.push_back(a);
a="";
}
}
第二步,可以写一个函数,专门来去掉前导零(erase)这就比较简单了
注意,不要用void,要不然无法返回string类型的值
string hhh(string s){
long long n;
for(int i=0;i<s.size();i++){
if(i==s.size()-1){
s.erase(0,s.size()-1);
return s;
}
if(s[i]>='1'&&s[i]<='9'){
n=i;
break;
}
}
s.erase(0,n);
return s;
}
第三步,字符串排序,sort排默认为是字典序,所以不要用。
首先,先比这个字符串的长短,短的在前,长的在后。
如果一样长,那就按照字典序排
bool cmp(string x,string y){
if(x.size()!=y.size()) return x.size()<y.size();
else return x<y;
}
最后在综合一下,就OK了