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

时间:2017-04-04 22:23:12

标签: c++

我正在阅读文本文件并加载到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

1 个答案:

答案 0 :(得分:1)

std::getline 将分隔字符(在您的情况下为换行符)添加到输出字符串。因此,std::string的{​​{1}}中没有一个包含换行符。因此,您需要在编写每个字符串后自己输出换行符。

然后请注意内部std::vector<std::string> course循环是完全没必要的。 for的{​​{1}}超载/专精,因此您可以简化为:

operator<<

如果你坚持内循环:

std::string

Live in action.