C++拆数字

这道题,主要分为3各版块:

第一步就是把原始的长字符串当中,把每一个由数字组成的子段给它截出来,这样的话就会得到很多个子段,那每一个子段就是一个string,然后把这些string放在一个数组里,这样第一步就完成了。

第二部现在面对的问题就是有一个字符串string组成的一个数组,那么这个数组当中的string,可能是有前导零的,所以第二步就是把这个string中的前导零清理掉(可以用erasesubstr),然后对于每个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了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值