我有以下代码,我知道它是如何工作的以及它的作用,但是,根本不知道。我不明白这三条线是如何工作的 std :: stringstream lineStream(line); std :: string cell; std :: getline(lineStream,cell,';') 特别是lineStream一个; 我在谷歌找到了他们,但没有充分的解释。请你解释一下他们的行为或分享一个好的链接吗?在此先感谢,祝你有个愉快的一天:)
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;
答案 0 :(得分:3)
std::stringstream lineStream(line);
这声明了一个名为lineStream
的{{3}}类型的变量。它将line
字符串传递给std::stringstream
。 std::stringstream
类型使用流接口包装字符串。这意味着您可以将其视为cout
和cin
,使用<<
和>>
来插入和提取字符串中的内容。在这里,正在创建lineStream
,以便您以后可以使用std::getline
提取其内容。
std::string cell;
这只是声明一个名为std::string
的空cell
。
std::getline(lineStream, cell, ';');
函数its constructor (2)接受一个流,它将从第一个参数中提取一行。第二个参数是std::string
,它将提取行。没有第三个参数,“行”的结尾被认为是我们看到换行符的位置。但是,通过传递第三个参数,此代码正在生成,以便行以;
结束。因此,此std::getline
调用将从流中提取所有内容,直到找到;
字符并将该内容放入cell
。然后丢弃;
字符。
这与上面的代码非常相似:
std::ifstream data(filename);
std::string line;
std::getline(data, line);
这里,流是文件流而不是字符串流,std::getline
将提取所有内容直到换行符,因为没有给出第三个参数。