1062 Text Reverse
阿新 • • 發佈:2019-04-20
!= .cn ostream 一個 using eof har img 輸入
http://acm.hdu.edu.cn/showproblem.php?pid=1062
思路:
最主要的是通過getline函數存取字符串。
如何讀取單個單詞,並且反向輸出?
用\n作為單個單詞的判定。
擴展:
getline函數的用法,詳解
int main() { string line; while(getline(cin,line)) cout<<line<<endl; return 0; }
大家會發現運行時怎麽也跳不出循環,甚至會發生各種莫名其妙的錯誤。why?
getline()的原型是istream& getline ( istream &is , string &str , char delim );
istream &is 表示一個輸入流,譬如cin;
string&str表示把從輸入流讀入的字符串存放在這個字符串中(可以自己隨便命名,str什麽的都可以);
char delim表示遇到這個字符停止讀入,在不設置的情況下系統默認該字符為’\n’,也就是回車換行符(遇到回車停止讀入)。
現在來分析一下while(getline(cin,line))語句
在這個語句中,首先getline從標準輸入設備上讀入字符,然後返回給輸入流cin,註意了,是cin,所以while判斷語句的真實判斷對象是cin,也就是判斷當前是否存在有效的輸入流。在這種情況下,我想只要你的電腦不中毒不發神經你的輸入流怎麽會沒有效?所以這種情況下不管你怎麽輸入都跳不出循環,因為你的輸入流有效,跳不出循環。
註意:這裏默認回車符停止讀入,按Ctrl+Z或鍵入EOF回車即可退出循環。
#include<stdio.h> #include<iostream> #include<string> using namespace std; int main() { int n, length, count = 0; string input_str; cin >> n; //讀取換行符,否則會出錯 getchar(); for (int i = 0; i < n; i++) {//將輸入的字符串存儲到string裏 getline(cin, input_str); //獲取字符串長度 length = input_str.size(); input_str[length] = ‘ ‘; //遍歷整個字符串 for (int j = 0; j <= length; j++) { //統計字符串裏面每個英語單詞的長度 if (input_str[j] != ‘ ‘) { count++; } else { for (int k = j - 1; k >= j - count; k--) { cout << input_str[k]; } if (j != length) cout << " "; count = 0; } } //輸出完後換行 cout << endl; } return 0; }
1062 Text Reverse