c++ - 从输出流中删除输入

标签 c++ vector iostream ostream

我想使用 std::copystd::ostream_iterator 打印出 vector 中的字符串作为逗号分隔列表括号之间。所以我必须处理删除最后一个元素之后的 ", " 的问题。

我试过了this :

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

int main() {

    std::vector<std::string> v;
    v.push_back("a");
    v.push_back("b");
    v.push_back("c");

    std::stringstream os;
    os << '(';
    std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(os, ", "));
    os.seekp(-2, std::ios_base::cur);
    os << ')';

    std::cout << os.str() << ".";

    return 0;
}

输出:

(a, b, c) .
         ^

但我得到的输出在右括号后有一个额外的空白字符,因为 seekp 只是移动了书写位置,而没有删除书写的字符。

有没有办法删除最后一个字符或写一个 EOF?

最佳答案

一开始就不要在末尾写额外的 ", " 怎么样...

if(!v.empty())
{
   std::copy(v.begin(), v.end()-1, std::ostream_iterator<std::string>(os, ", "));
   os << v.back();
}

关于c++ - 从输出流中删除输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817038/

相关文章:

c++ - 枚举类和 boost 序列化

c++ - 函数模板中的数组类型推导

c++ - vector 中的自动指针(智能)

c++ - 来自 vector 的值与原始值不同

c++ - 是否有一个很好的习惯用法来处理替代输出流?

c++ - 在 C++ 流中检索标志

c++ - 为什么当我输入定点符号时,我的输出是 0.00?

c++ - vector<Point> myArr 的深拷贝

c++ - 具有结构的简单程序。获取此 : invalid operands of types 'void' and '<unresolved overloaded function type>' to binary 'operator

c++ - Qt 中的多模态窗口