AT1808——string类insert()函数的使用

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;
}

结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51344172/article/details/112174996