类字符串流.无法理解lineStream的工作原理及其参数



我有下面的代码,我知道它是如何工作的,也不知道它做什么。我不明白这三条线是怎么工作的std::stringstream lineStream(line);std::字符串单元格;std::getline(lineStream,cell,';')特别是lineStream one;我在谷歌上找到了它们,但没有充分的解释。你能解释一下他们的行为吗?或者分享一个好的链接?提前感谢,祝你今天愉快:)

container *begin = new container;
begin->beginBox = new box;
container *last = NULL;
std::ifstream  data(filename);
std::string line;
std::getline(data, line);
for (container *i = begin; !data.eof() && std::getline(data, line);)
{
std::stringstream lineStream(line);
std::string cell;
std::getline(lineStream, cell, ';');
i->ID = atoi(cell.c_str());
for (box *j = i->beginBox; std::getline(lineStream, cell, ';'); j->next = new box, j = j->next)
{
j->apples = atoi(cell.c_str());
i->lastBox = j;
}
i->lastBox->next = NULL;
i->nextCont = new container(), last = i, i = i->nextCont, i->beginBox = new box;
}
setAutoIncrement(begin->ID + 1);
last->nextCont = NULL;
return begin;
std::stringstream lineStream(line);

这声明了一个名为lineStream、类型为std::stringstream的变量。它将line字符串传递给它的构造函数(2)。std::stringstream类型使用流接口封装字符串。这意味着您可以像对待coutcin一样对待它,使用<<>>从字符串中插入和提取内容。这里创建了lineStream,以便以后可以使用std::getline提取其内容。

std::string cell;

这只是声明了一个名为cell的空std::string

std::getline(lineStream, cell, ';');

函数std::getline(1)将从中提取一行的流作为其第一个参数。第二个参数是一个std::string,它将把行提取到其中。如果没有第三个参数,"行"的结尾被认为是我们看到换行符的地方。然而,通过传递第三个参数,这段代码使得一行以;结束。因此,这个对std::getline的调用将从流中提取所有内容,直到它找到一个;字符并将该内容放入cell中。然后丢弃;字符。


这与上面的代码非常相似:

std::ifstream  data(filename);
std::string line;
std::getline(data, line);

这里,流是文件流,而不是字符串流,std::getline将提取所有内容,直到换行符,因为没有给出第三个参数。

最新更新