C++读取string字符串的N种方式以及常见问题

1.实现


  1. 整行读取(包括空格)
    直接用cin读取string的话如果遇到空格会断开,用下面的语句就可以读取包含空格的字符串:
	getline(cin,sLine);

需要注意要getline函数需要先#include <string>


  1. 整行读取(包括空格)2
    一个一个字符读取,读到回车键结束(但并不会读入回车键),如果需要对每个字符进行处理的话这种方法最合适,在OJ中运行可能会出现问题
	string s = "";
	char ch;
	while ((ch = getchar()) != '\n') s+=ch; //此处可以do stuff

  1. 读取整个文件为一个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;
}

  1. 逐行读取整个文件为一个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.问题

  1. 控制台输出中文乱码:

    Windows(中文)默认的字符集是Windows-936(GBK),mingw的内部是GCC,而GCC编译器默认编译的时候是按照UTF-8解析和输出的,当未指定字符集时一律当作UTF-8进行处理,于是造成乱码。

解决方案:

	system("@chcp 65001");  //会有回显

或:
(需包含头文件windows.h)

SetConsoleOutputCP(65001);

将控制台编码设置为utf8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值