cout 用于仅打印最后一行的 2D 字符串矢量

cout for 2D string vector only printing last line

本文关键字:一行 2D 字符串 用于 打印 最后 cout      更新时间:2023-10-16

我正在读取一个文本文件并加载到std::vector<std::string> course,当我尝试根据course.size()打印它并course[i].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';
}

在行动中生活。