1. 程式人生 > >1062 Text Reverse

1062 Text Reverse

!= .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