C++ getline(cin,str), getchar(), cin ,cin.ignore() 字符串和字符讀入方式的區別

1 cin

讀入數字、字符、字符串等,讀到空格符、製表符、換行符停止讀入。

2 getline(istream &is , string &str , char delim)

讀入帶空格、製表符等字符的字符串getline,其原型爲如下:

istream& getline ( istream &is , string &str , char delim ); 

(1) istream &is :輸入流,例如cin;

(2) string &str 將輸入流讀入字符串str中;

(3) char delim :讀到delim字符停止讀入,delim可省略,在不設置的情況下系統默認值爲爲'\n',即回車換行符,遇到回車後停止讀入。

ps: cin >> str後接着getline(cin, str)語句時,會導致無法通過getline讀入str字符串,原因是:當前面通過cin讀取一個字符串時,需輸入一個字符串並按回車,此時getline(cin,str)讀到該回車符,就判斷結束了,導致字符串str無法讀入。

解決方法:在cin >> str 語句後加上cin.ignore() 語句,用於忽略cin讀入數據後的回車符

3 getchar()

從輸入緩衝區讀取數據,只讀一個字節,遇到換行符停止讀取,可讀取空格符。

ps: 如果通過getchar()讀取數據後,在程序中第二次調用getchar()函數讀取數據時,讀取的是換行符,原因是:此時輸入緩衝區中回車鍵的數據沒有被讀出,第二個getchar()函數讀出的是回車符。

解決方法:在兩個getchar()語句中間加上cin.ignore() 語句,用於忽略上一個getchar()讀入數據後的回車符

 

例題

輸入字符串s和字符c,要求去掉s中所有的c字符,並輸出結果。

輸入描述

測試數據有多組,每組輸入字符串s和字符c。

輸出描述

對於每組輸入,輸出去除c字符後的結果。

輸入樣例

goaod
a
blue_print
_

輸出樣例

good
blueprint
#include <iostream>

using namespace std;

int main() {
    string str;
    char ch;
    while(getline(cin, str)) {
        ch = getchar();
        cin.ignore();
        for (auto c : str) {
            if(c != ch) {
                cout << c;
            }
        }
        cout << endl;
    }
    return 0;
}

 

 

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