字符串插入

有两个不包含空白字符的字符串 str 和 substr,strstr 的字符个数不超过 10,substr 的字符个数为 3。(字符个数不包括字符串结尾处的 \0。)

将 substr 插入到 str中 ASCII 码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式

输入包括若干行,每一行为一组测试数据,格式为

str substr

输出格式

对于每一组测试数据,输出插入之后的字符串。

输入样例:
abcab eee
12343 555
输出样例:
abceeeab
12345553

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    string a, b;
    while (cin >> a >> b)/*
    这里用的while的输入循环,只要输入,就会运行
    */
    {
        int p = 0;//定义变量p,用此变量来确定ascii码最大字符的位置
        for (int i = 0; i < a.size(); i++)//这是遍历,将字符一个一个的排查,为后面寻找ascii码最大的字符做铺垫
            if (a[i] > a[p])/*
            用i这个中间变量来操作,i从0号位开始,依次向后遍历,如果找到一个比a[p]大的‘
            那么此时i的位置就是ascii码值最大字符的位置p,所以把此时i的值赋给p,
            注意,在此过程中,p是随着i的变化而变化的,并不是一成不变的
            */ 
                p = i;
        cout << a.substr(0, p + 1) + b + a.substr(p + 1)<<endl;
        /*
        这是substr函数,此处用来输出某个位置到某个位置的字符串,当找到最大ascii码字符位置p时,
        我们先输出从0号位开始到p位置的字符串,0到p位置的长度为p+1,所以是a.substr(0,p+1),其中
        0代表起点位置,p+1则是这段距离的长度,这就是substr函数的操作方法,括号里面的两个参数分别是
        起点位置和这一段字符串的长度,因为是在ascii码最大字符后插入b字符,所以加b,第二段字符串输出后,就
        输出第三串,这第三串就是之前a字符串被分割后剩余的部分,因为需要把剩下的字符串全部输出,所以直接只写
        起点位置p+1,不用写距离,这样表示的是直到输出最后一个字符串,如此,这道题就解决了
        */
    }

    return 0;
}

这个题是插入字符串,他的思路是把这要输出的字符串分成三部分,第一部分是起点到p位置的字符串,第二部分是要插入的字符串,第三部分是第一个字符串被拆解后的所有剩余的字符串,这就是这个题的思路,做题目思路很重要,我之前在这卡了很久,就是没想到要这样做。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值