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; }
运行结果: