C++ 讀取字符串

       在C++中可以通過cin來讀取一個字符串,但是每次讀取一個單詞並不是最好的選擇,例如,假設程序要求讀入的城市名,用戶輸入New York,希望程序讀入的是完成的城市名,而不單單是一個單詞。C++提供了一次額面向行的類成員函數:getline()和get()。這兩個函數都讀取一行輸入,直到到達換行符。然而,隨後getline()將丟棄換行符,而get()將換行符保留在輸入序列中。

       1. 面向行的輸入:getline()

     getline()函數讀取整行,它使用通過回車鍵輸入的換行符來確定輸入的結尾。要調用這種方法,可以使用cin.getline()。該函數有兩個參數,第一的參數是用來存儲輸入行的數組的名稱,第二個參數是要讀取的字符數。getline()成員函數在讀取指定數目的字符或遇到換行符時停止讀取。

        假如要使用getline()將姓名讀入到一個包含20個元素的name數組中,可以使用這樣的函數調用:

cin.getline(name,20);

這將把一行讀入到name數組中——如果這行包含的字符不超過19個。

       2. 面向行的輸入:get()

       還有另外一種方法,istream類有另外一個名爲get()的成員函數,該函數有幾種變體,其中一種變體的工作方式與getline()類似,他們接受的參數形同,解釋參數的方式也相同,並且都是讀取到行尾。但get並不在讀取並丟棄換行符,而是將其留在輸入隊列中。加入兩次調用get();

cin.get(name,ArSize);
cin.get(dessert,ArSize);

 由於第一次調用後,換行符將留在輸入隊列中,因此第二次調用時看到的第一個字符便是換行符,因此get()認爲已經到達行尾,而沒有發現任何可讀的內容。因此使用get()的方式將兩個類成員函數拼接起來,如下:

cin.get(name,ArSize).get();

之所以這麼做,是由於cim.get(name,ArSize)返回一個cin對象,該對象隨後被用來調用get()函數,同樣,下面的語句將把輸入中連續的兩行分貝讀入到數組name1和name2中,其效果與兩次調用cin.getline()相同:

cin.getline(name1,ArSize).getline(name2,ArSize);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章