AT1808——string類insert()函式的使用
阿新 • • 發佈:2021-01-07
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;
}
結果: