1. 程式人生 > >PAT 乙級 1009

PAT 乙級 1009

行數據 所有 數據 back ace 編寫 namespace pat 變量

一、題目

說反話

給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。

輸入格式:測試輸入包含一個測試用例,在一行內給出總長度不超過80的字符串。字符串由若幹單詞和若幹空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用1個空格分開,輸入保證句子末尾沒有多余的空格。

輸出格式:每個測試用例的輸出占一行,輸出倒序後的句子。

輸入樣例:

Hello World Here I Come

輸出樣例:

Come I Here World Hello

二、題解

本題本身屬於比較簡單的字符串操作題,但是因為對於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 }

PAT 乙級 1009