AT1808——string类insert()函数的使用
题目描述
输入字符串a和b, c, d, e,请在在字符串a的第b、第c、第d、第e处后加双引号
(如果是0就是在开头加一个双引号,0<=b<c<d<e<=字符串a的长度)
输入输出样例
输入 #1
MinnnahaNakayoshi
0 6 8 17
输出 #1
"Minnna"ha"Nakayoshi"
输入 #2
Niwawo_Kakemeguru_Chokudai
11 17 18 26
输出 #2
Niwawo_Kake"meguru"_"Chokudai"
输入 #3
___
0 1 2 3
输出 #3
"_"_"_"
题解
后面了解到 insert() 函数,插入字符函数实现我的想法,于是学习后进行改进,解题代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s1,s2,a;
int b;
cin>>s1;
a += char(34);
for(int i=0;i<4;i++){
cin>>b;
s2 = s1.insert(b+i,a);
}
cout<<s2<<endl;
return 0;
}
我的错误点:
拿到这道题最开始我想的是,在对应的b,c,d,e处加一个双引号,然后将所有的在该位置之后的字符床位置向后移一位即可,由于我最开始用的是 char 数组a,后面发现这样操作,a的长度是随时在变的,就出现了点问题(可能是我还不够了解 strlen())。贴一下错误的部分代码:
#include <bits/stdc++.h>
using namespace std;
#define N 110
int main()
{
char a[N];
int b,c,d,e;
cin>>a;
cin>>b>>c>>d>>e;
for(int i=strlen(a);i>b+1;i--){
a[i]=a[i-1];
}
a[b+1]=a[b];
a[b]='"';
for(int i=strlen(a)+1;i>c+1;i--){
a[i]=a[i-1];
}
a[c+2]=a[c+1];
a[c+1]='"';
吐槽:
这个题在学了 insert() 函数后,我WA了三次,理由分别是:leecode 编译器,不支持,直接 ’ ” ’ ,必须用 char 输出,就这我改了两遍(看了题解知道的,害),WA第三次是我最无语的,因为没有输出 <<endl ,被迫WA
总结:
精华
贴一下转载博客(今天也是像大佬学习的一天):https://blog.csdn.net/weixin_39583140/article/details/88798799.
学习insert()看的博客,以下是转载的部分内容
insert为String模板类(basic_string)的成员函数:
1.原型一: basic_string insert(pos1,num,c)其中,pos1位插入位置,num位插入数量,类型为size_type可当无符号 int使用,c为插入的字符,返回值为string 的临时变量(注意返回的不是原string的引用);
测试如下:
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1 = "0123456";
string s2=s1.insert(2,3,'A');
cout << s1<<"\n";
cout << s2 << "\n";
system("pause");
return 0;
}
结果:
2.原型二:basic_string insert(pos,str2)在pos位置往后插入字符串(或常量字符串)
测试如下:
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1= "0123456";
string s2= "0123456";
string str = "BBB";
s1.insert(2, "AAA");
s2.insert(2,str);
cout << s1<<"\n";
cout << s2 << "\n";
system("pause");
return 0;
}
结果:
3.原型三:basic_string insert(pos,cstr,num) 其中pos为插入位置,cstr为插入的C串
注意:第二个参数若为字符串(string)则num实际上为pos(见4),下例中一起进行对比
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1= "0123456";
s1.insert(2,"hello",3);
cout << s1<<"\n";//参数为const char*时候,num表示为“从前往后的3个字符",还不信的话见下
string s2 = "0123456";
char str[] = "hello";//str为const char*类型
s2.insert(2, str, 3);
cout << s2 << "\n";
string s3 = "0123456";
string sstr = "hello";
s3.insert(2,sstr,3);
cout << s3 << "\n";//str为string类型时候,num表示“从第num位置开始往后的所有字符”
system("pause");
return 0;
}
结果: