C++ getline、get和put函數


 getline函數

這個函數我們之前就有使用過:由於流提取運算符(>>)會以空白符分割,所以我們的輸入中無法包含空格。而使用getline函數可以指定分隔符,這樣就可以讀入包含空格的文本了(如:New York)。關於getline函數,可以回顧博客C++字符串最后的部分。

getline函數定義在頭文件<iostream>中。

當時我們寫的是

getline(cin, city, '\n');

這句話的意思是,從標准輸入(鍵盤)讀入到字符串city中,並使用換行作為分隔符。

這里我們規范一下getline函數的語法:

getline(ifstream& input, string s, char delimitChar)
//input是輸入的對象,可以是一個文件,也可以是標准輸入(cin)
//s是接受字符串,所讀取的信息存儲在s中
//delimitChar是分隔符,默認是空白符

當函數讀到分隔符或文件末尾時,就會停止。

get函數和put函數

get函數會從輸入對象讀取一個字符,而put函數會向輸出對象寫入一個字符。

get函數有兩個版本:

char get()
ifstream* get(char& ch)

第一個版本返回從輸入對象讀取的一個字符。

第二個版本則將字符存在字符ch中,並返回輸入對象的引用。

put函數只有一個版本:

void put(char ch)

它將指定的字符寫入輸出對象。

下面我們給出一個例子,用於一個文件復制為另一個文件:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    cout << "輸入要復制的文件名:";
    string inputFileName;
    cin >> inputFileName;

    cout << "輸入復制后的文件名:";
    string outputFileName;
    cin >> outputFileName;

    ifstream input(inputFileName.c_str());
    ofstream output(outputFileName.c_str());

    if(input.fail()){
        cout << "文件不存在!" << endl;
        return -1;
    }

    char ch = input.get();
    while(!input.eof()){
        output.put(ch);
        ch = input.get();
    }

    input.close();
    output.close();

    cout << "復制完成" << endl;
    return 0;
}

運行結果:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM