如何在cpp中读取原始输入

时间:2018-12-15 20:45:36

标签: c++ string input stream cin

想象一下,我想在stdin中复制粘贴一些文本,而我想完全在cpp中读取它(包括空格)。我该怎么做?如果使用cin,它将读取以空格分隔的标记。如果我这样做:

string text
string s;
while(cin>>s){
    text += s;
}

然后,标记之间是空格(“”)还是换行符(“ \ n”)变得难以区分。 问题是,如何读取整个字符串。

3 个答案:

答案 0 :(得分:1)

如果您想要快速编写代码,请使用std::istream::getc

std::string text;
char c;
while ( std::cin.getc(c) )
{
   text.push_back(c);
}

如果您希望stdin的内容很大,这将是性能问题。对于此类用例,您应该考虑使用std::istream::read

答案 1 :(得分:0)

要使所提供的while循环方法的结果与众不同,我必须像这样用SELECT task.id, task.title, task.information, user.usename AS created_by, user2.usename AS given_to FROM (task INNER JOIN user ON task.created_by_user = user.id) INNER JOIN user AS user2 ON task.created_by_user = user2.id; 来读取它:

readline()

这样,可以确保readline读取整行(带有空格),并且给定的标记仅由“ \ n”(可以手动添加)定界。

答案 2 :(得分:0)

来自cplusplusreference.com:

  

作为istream类的对象,可以将字符检索为   使用提取运算符(operator >>)或   未格式化的数据,使用诸如read之类的成员函数。

cin - C++ Reference

我得到:

#include <iostream>
#include <string>

using std::string;
using std::cin;
using std::cout;
using std::endl;

int main()
{
    char c;
    string text;

    while (!cin.read(&c, 1).eof())
        s += c;

    cout << "string was " << s << endl;
}

在Windows上,以一行单独的结尾,然后按。我测试了它,确实包含了行尾字符。