cout 用于仅打印最后一行的 2D 字符串矢量
cout for 2D string vector only printing last line
我正在读取一个文本文件并加载到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';
}
在行动中生活。
相关文章:
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 在 C++ 中搜索 2D 数组以查看一行/列是否与另一行/列相同
- 如何在一行中使用 Java 中的 ArrayList 创建大小为 M*N 的 2D 矩阵,其中 X 作为每个单元格的值?
- 将地址返回到 2D 数组中的一行值的函数
- cout 用于仅打印最后一行的 2D 字符串矢量
- 在 2D 向量中从每一行添加最大元素,以使行元素 $A_i$ 小于 $A_(i+1)$
- 按一行对2D数组进行排序
- 无法弄清楚为什么只从文件中读取一行矩阵以及为什么我无法将 2D 数组传递给函数
- 打印一行 2D 字符数组 (C++)
- C++ - 将数字表从文件读取到 2D 数组中(仅存储最后一行)
- 根据某一行对整个 2D 向量进行排序
- 用“ strcpy”在2D数组中删除(字符)的一行(字符)时是否存在任何错误
- 在2D数组的每一行中找到所有可能的组合
- 计算 2D 数组 C++ 中的每一行
- 如何在2D数组中每行之后进入下一行
- 我想找到一个2d数组C++中每一行的最大值
- 求2D数组C++中每一行的最大值
- C++中的动态2D数组,需要在每一行和整个数组中乘以偶数
- 基于C++中每一行的总和对2D阵列进行排序
- 将静态 2D 数组的行分配给另一行