【发布时间】:2014-11-14 19:35:20
【问题描述】:
我有一个二维字符串向量需要打印出来。整个程序应该从 txt 文件中读取一行,将其中的每个单词存储为不同的元素,然后将“单词向量”推送到包含例如 100 行的向量中。我已经完成了所有工作,但是当我必须打印矢量时问题就出现了。每行可以有不同数量的单词,例如:
我喜欢蛋糕
很多。
所以我不能使用:
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << vec[i][j];
}
}
因为第二行不包含 3 个元素并且程序关闭。
知道怎么做吗?注意:我的讲师不接受 C++11,因此基于 C++98 的解决方案将不胜感激。这是我的功能:
void readline(vector<vector<string> >& lines, int size)
{
vector<string> row;
string line, word;
fstream file;
istringstream iss;
int i;
file.open("ticvol1.txt", ios::in);
for (i = 0; i < size; i++)
{
getline(file, line);
iss.str(line);
while (iss >> word) row.push_back(word);
lines.push_back(row);
}
}
【问题讨论】:
-
传递大小是愚蠢的。
lines.size()为您提供行中向量的数量,lines[i].size()为您提供 TADA 行中的单词数。 -
你不必知道如何匹配向量中的元素,你必须打印它(或一般迭代它)。正如@IdeaHat 所说,只需使用
.size(),仅此而已。而且,向量中存储什么样的元素并不重要。 -
或者你可以为
vector写operator<<专门化并使用它
标签: c++ loops for-loop vector c++03