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

我已经尝试过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/

10-11 22:43
查看更多