有两个不包含空白字符的字符串 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位置的字符串,第二部分是要插入的字符串,第三部分是第一个字符串被拆解后的所有剩余的字符串,这就是这个题的思路,做题目思路很重要,我之前在这卡了很久,就是没想到要这样做。