【发布时间】:2018-03-22 15:34:33
【问题描述】:
我正在使用 getline 从 .txt 文件中读取信息并使用该信息创建邻接图。文本文件的行数总是与每行中的条目一样多,但这个数量永远不知道。到目前为止,我有这个:
string title = argv[1];
ifstream myfile(title);
string line;
string word;
stringstream ss;
if (myfile.is_open())
{
while (getline(myfile,line))
{
ss << line; //this line was edited after the post, the problem //is the same.
while (getline(ss, word, ','))
{
//do some stuff to word
}
}
}
第一个while循环完成并将文件中的每一行读入line,然后每一个新行都成功读入ss。但是内部while循环只运行一次,外部while循环第一次运行。此后,while 条件 (getline(ss,word,',')) 为 false。
测试文件中信息的格式如下:
城市,亚特兰大,波士顿,博尔德,夏安,芝加哥
亚特兰大,0,-1,-1,-1,-1
波士顿,-1,0,-1,-1,982
博尔德,-1,-1,0,-1,1130
夏安,-1,-1,-1,0,-1
芝加哥,-1,982,1130,-1,0
我真的不知道发生了什么。有什么想法吗?
【问题讨论】:
-
更改为
ss<<line;可能会成功。 -
我建议根据您的输入记录对结构进行建模。在结构中重载
operator>>以读取列/字段。恕我直言,这种设计比您尝试使用循环在列中阅读要好。此外,列并不多,因此通过读取每个字段而不是使用循环,您的代码可能会更有效。 -
我相信你要把
line插入stringstream ss,把>>改成<<。欲了解更多信息,请访问 (cplusplus.com/reference/sstream/stringstream)