1.实现
- 整行读取(包括空格)
直接用cin读取string的话如果遇到空格会断开,用下面的语句就可以读取包含空格的字符串:
getline(cin,sLine);
需要注意要getline函数需要先#include <string>
- 整行读取(包括空格)2
一个一个字符读取,读到回车键结束(但并不会读入回车键),如果需要对每个字符进行处理的话这种方法最合适,在OJ中运行可能会出现问题
string s = "";
char ch;
while ((ch = getchar()) != '\n') s+=ch; //此处可以do stuff
- 读取整个文件为一个string
#include <iostream>
#include <fstream>
using namespace std;
string read(string path)
{
ifstream f;
string text="";
f.open(path,ios::in);
if(!f.is_open())
return "#Error opening#";
string buf;
while(getline(f, buf))
{
text+=buf;
text+="\n";
}
f.close();
return text;
}
- 逐行读取整个文件为一个string数组(每一行为一个string)
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
vector<string> readLines(string path)
{
ifstream f;
vector<string> lines;
string buf;
f.open(path,ios::in);
if(f.is_open())
while(getline(f, buf))
lines.push_back(buf);
f.close();
return lines;
}
2.问题
- 控制台输出中文乱码:
Windows(中文)默认的字符集是Windows-936(GBK),mingw的内部是GCC,而GCC编译器默认编译的时候是按照UTF-8解析和输出的,当未指定字符集时一律当作UTF-8进行处理,于是造成乱码。
解决方案:
system("@chcp 65001"); //会有回显
或:
(需包含头文件windows.h)
SetConsoleOutputCP(65001);
将控制台编码设置为utf8