# 字串處理 https://neoj.sprout.tw/problem/2334/ ### 題目敘述 小高某天撿到了一個字串,那個字串是小寫英文字母組成。小高覺得這個字串很可愛,決定把它送給心儀的女生,於是他雀躍地前往心儀的女生的家。 突然他注意到路旁有一家專門美容字串的店,他提供一些字串操作讓你的字串變得美美的,就連字串自己照鏡子都會覺得好美,忍不住多看一眼。 他們提供的服務有: 1. 在你的字串由左數來(1-base)的第 i 個字元右邊插入一個字串,若 i 等於 0 代表是在整個字串的左邊插入字串。 2. 將你的字串由左數來(1-base)的第 l 個到第 r 個字元通通消除。 3. 將你的字串由左數來(1-base)的第 l 個到第 r 個字元整個反轉。 小高腦中已經有如何幫他的字串美容的想法,只是他很怕做出來的結果不符合原本的期待。身為一位在旁邊看戲的陌生人,請你幫幫小高,告訴他若按照他的計畫做,他的字串會長怎樣。 ### 輸入說明 第一行輸入小高撿到的字串,長度為$N, 1≤N≤100$,下一行是一個數字 $Q$ 代表要對小高的字串依序做 $Q$ 筆操作,接下來有 $Q$ 行,每一行代表要做哪種操作與其參數。 若輸入為"insert" 接著輸入一個數字 $i$ 與字串 $S , 1≤S≤100$,只包含小寫英文字母,代表第一種操作。 若輸入為"delete" 接著輸入兩個數字$l, r$,代表第二種操作。 若輸入為"reverse" 接著輸入兩個數字$l, r$,代表第三種操作。 保證操作不會導致空字串以及所有的操作的索引值都是合法的,也就是不會有字串長度為 10 卻要你把第 9 個字元到第 15 個字元刪掉的這種情形。 ### 輸出說明 輸出一行字串,為字串處理後的結果。(行尾換行) ### 範例輸入 ``` aaa 3 insert 1 bcdefg delete 7 9 reverse 2 5 ``` ### 範例輸出 ``` aedcbf ``` ### 補充說明 範例測資第一個操作做完後字串為 abcdefgaa 第二個操作做完後字串為 abcdef 第三個操作做完後字串為 aedcbf # Code ```cpp #include <iostream> #include <string> #include <sstream> using namespace std; void Insert(); void Delete(); void Reverse(); string s; int main() { cin >> s; int Q; cin >> Q; //input while (Q--) { char c[20]; cin >> c; if (c[0] == 'i') Insert(); else if (c[0] == 'd') Delete(); else Reverse(); } cout << s << "\n"; } void Insert() { int i; cin >> i; string toin; cin >> toin; s.insert(i, toin); return; } void Delete() { int a, b; cin >> a >> b; s.erase(a - 1, b - a + 1); return; } void Reverse() { int a, b; cin >> a >> b; a--; b--; for (int i = 0; a + i <= b - i; i++) { swap(s[a + i], s[b - i]); } return; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up