1. 程式人生 > 其它 >AT1808——string類insert()函式的使用

AT1808——string類insert()函式的使用

技術標籤:Leetocdeleetcode字串

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

結果:

在這裡插入圖片描述