PAT 乙级 1009
題目
??? 題目地址:PAT 乙級 1009
?
題解
??? 本題本身屬于比較簡單的字符串操作題,但是因為對于string的操作和函數不熟悉導致本題做起來很費勁,需要加強對于string類以及相關方法的理解和熟練程度。
??? 1. string讀取字符串時,默認以空格或者回車作為結束輸入的標志,所以在本題中,如果用string的普通輸入無法完整讀入數據,因此需要使用getline方法
????????? getline()
??????????????? 頭文件:#include <string>
??????????????? 函數原型:getline(istream &is,string &str,char delim)
??????????????? 主要功能:讀入整行數據,不把空格作為判斷輸入結束的條件,默認是回車,可以自行設置結束條件
????????????? ? istream &is表示一個輸入流,譬如cin,string表示把從輸入流讀入的字符串存放在這個字符串中(&str其實就是一個變量),char delim是終止符(默認為回車,還可以是別的符號,如#,*之類的都可以)
??? 2. 如果需要對某一個字符串進行切片處理時,本題中用到的方法是substr()
????????? substr()
?????????????? 頭文件:#include <string>
?????????????? 函數原型:substr(size_t pos = 0, size_t len = npos)
?????????????? 主要功能:復制某一范圍內的子字符串,要求從指定位置開始,并具有指定的長度
?
代碼
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 int main() { 7 string str; 8 vector<string> out_str; 9 getline(cin, str); 10 str[str.size()] = ' '; 11 int start = 0, cnt = 0; 12 string tmp; 13 for (int i = 0; i < (str.size() + 1); i++) { 14 if (str[i] == ' ') { 15 tmp = str.substr(start, cnt); 16 out_str.push_back(tmp); 17 start = i + 1; 18 cnt = -1; 19 } 20 cnt++; 21 } 22 for (int i = out_str.size() - 1; i >= 0; i--) { 23 cout << out_str[i]; 24 if (i != 0) 25 cout << ' '; 26 } 27 28 return 0; 29 }?
更新后的代碼
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() { 6 string str; 7 getline(cin, str); 8 int last = str.size(); 9 for (int i = str.size() - 1; i >= 0; i--) { 10 if (str[i] == ' ' || i == 0) { 11 if (i == 0) i = -1; 12 for (int j = i + 1; j < last; j++) 13 cout << str[j]; 14 if (i != -1) 15 cout << ' '; 16 else 17 cout << endl; 18 last = i; 19 } 20 } 21 22 return 0; 23 }?
轉載于:https://www.cnblogs.com/moujun1001/p/9326932.html
總結
以上是生活随笔為你收集整理的PAT 乙级 1009的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery事件重复绑定的几种解决方法
- 下一篇: 南邮CTF-MISC-Remove Bo