也许我错过了一些东西但是我在查找有关如何从iostream (std::iostream& stream)
中读取的任何信息时遇到了很多麻烦。无论如何我可以把它转换为字符串或类似的东西吗?
为了澄清这是(例如我基本上要做的):
std::stringstream ss("Maybe I'm missing something \n but I'm having a lot of trouble finding any information on how to how to read from an iostream.");
readStream(ss);
void readStream(std::iostream& stream)
{
std::string out;
stream >> out;
//do some stuff with the string
}
这似乎有效,但out
将等于“Maybe”而不是完整的字符串。
答案 0 :(得分:3)
Streams会自动转换为他们转移到的类型。
using namespace std;
int number;
double fraction;
string world;
stream >> number >> fraction >> world;
当转换为字符串时,它会一直读到第一个字分隔符,您可能希望使用std::getline。
using namespace std;
string line;
getline(stream,line);
答案 1 :(得分:2)
你从iostream中读取的方式与使用cin时相同。
stream >> varName;
疯狂的语法是的,但这就是溪流的制造者决定做的事情。
如果您阅读字符串,也可以使用get和getline。获取将获得下一个字符或指定的字符缓冲区,getline将转到下一个换行符。
getline(stringName);
您可以在此处详细了解:http://cplusplus.com/reference/iostream/iostream/
答案 2 :(得分:0)
也许你想阅读整行,在这种情况下你必须使用std::getline
,因此有:
void readStream(std::iostream& stream)
{
std::string out;
// while getting lines
while(std::getline(stream, out))
{
//do some stuff with each line
}
}
您还可以选择行分隔符,方法是将其作为第三个参数传递给std::getline
。
答案 3 :(得分:0)
流运营商>>用于读取格式化的空格分隔文本。
int val1;
stream >> val1; // reads a space separated int
float val2;
stream >> val2; // reads a space separated float
std::string val3;
stream >> val3; // reads a space separated word.
不幸的是,std :: string(和C-Strings)不对称(输入/输出不能以相同的方式工作(与其他基本类型不同))。当你写它们时,它们会写出完整的字符串(u-pto null终结符'\ 0'的C字符串)。
If you want to read a whole line of text use std::getline()
std::string line;
std::getline(stream, line);
但是和大多数语言一样,你可以循环读取流,直到它完成。
std::string word;
while(stream >> word)
{
// Reads one word at a time until the EOF.
std::cout << "Got a word (" << word << ")\n";
}
或者同一行一次:
std::string line;
while(std::getline(stream, line))
{
// Reads one word at a time until the EOF.
std::cout << "Got a word (" << word << ")\n";
}
注1:我提到上面分隔的空白区域。白色空间包括空格/制表符,最重要的是新行,因此使用运算符&gt;&gt;上面它会一次读一个字,直到文件结束,但忽略换行。
注2:运算符&gt;&gt;应该用于格式化文本。因此,它的第一个动作是删除前缀空白字符。在第一个非空白文本中,根据输入类型解析输入,并停止与该类型不匹配的第一个字符(包括空格)。