[英]cout for 2D string vector only printing last line
我正在读取文本文件并将其加载到std::vector<std::string> course
并且当我尝试基于course.size()
和course[i].size
course.size()
打印它时,它仅显示最后一行。
这是代码:
int main(int argc, char** argv) {
ifstream fin(argv[1]);
vector<string> course;
string line;
while (getline(fin, line)) {
course.push_back(line);
}
for (int i = 0; i < course.size(); i++) {
for (int j = 0; j < course[i].size(); j++) {
cout << course[i][j];
}
}
return 0;
}
尝试通过添加以下内容来删除'\\r'
:
if (!line.empty() && line[line.size() - 1] == '\r') {
line.erase(line.size() - 1);
}
但这只是将每行[i][j]
彼此相邻地打印出来。
数据如下所示:
xxxxxxxxxxxx
xxx yyyxxx
xxxXXYYxxyyy
std::getline
不分隔字符(在你的情况下,新行)添加到输出字符串。 因此,您std::vector<std::string> course
的所有std::string
都不包含换行符。 因此,您需要在编写每个字符串之后自行输出换行符。
然后请注意,完全不需要内部for
循环。 std::string
有一个operator<<
的重载/专业化,因此您可以简化为:
for (std::size_t i = 0; i < course.size(); ++i) {
std::cout << course[i] << std::endl; // or '\n' if you don't need flushing
}
如果您坚持内循环:
for (std::size_t i = 0; i < course.size(); i++) {
for (std::size_t j = 0; j < course[i].size(); j++) {
std::cout << course[i][j];
}
std::cout << '\n';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.