簡體   English   中英

2D字符串向量的cout僅打印最后一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM