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了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,我们可以使用open()函数打开一个txt文件,并使用readlines()函数逐行读取文件中的内容。然后,我们可以使用split()函数将每一行的字符串分成单个的数字,并通过循环逐个读取这些数字。 首先,我们需要确保要读取的txt文件与Python脚本在同一个目录下。然后,我们可以使用以下代码逐个读取txt文件中的数字: ```python # 打开txt文件 with open('file.txt', 'r') as f: # 逐行读取文件内容 lines = f.readlines() # 遍历每一行 for line in lines: # 使用split()函数将字符串分成数字列表 numbers = line.split() # 遍历每个数字 for number in numbers: # 将数字转换为整数类型,并输出 number = int(number) print(number) ``` 这段代码首先通过open()函数打开名为file.txt的txt文件,我们可以将其替换为你希望读取的文件名。由于文件打开后必须关闭,所以我们使用with语句来自动关闭文件。 然后,我们使用readlines()函数逐行读取文件中的内容,并将其保存在一个列表(lines)中。接着,我们遍历lines列表中的每一行,并使用split()函数将每一行的字符串分成数字列表(numbers)。 最后,我们再次使用一个循环遍历numbers列表中的每个数字,并将其转换为整数类型后输出。你可以根据需要对这些数字进行其他操作,例如进行计算、存储到另一个列表中等等。 希望这段代码能够帮助到你,如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值