想象一下,我想在stdin中复制粘贴一些文本,而我想完全在cpp中读取它(包括空格)。我该怎么做?如果使用cin,它将读取以空格分隔的标记。如果我这样做:
string text
string s;
while(cin>>s){
text += s;
}
然后,标记之间是空格(“”)还是换行符(“ \ n”)变得难以区分。 问题是,如何读取整个字符串。
答案 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之类的成员函数。
我得到:
#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上,以一行单独的