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; }
運行結果: