gpt4 book ai didi

c++ - 如何打印以逗号分隔的元素列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:37 24 4
gpt4 key购买 nike

我知道如何用其他语言做到这一点,但我不知道如何用 C++,我不得不在这里使用它。

我有一组字符串(关键字)作为列表打印到out,字符串之间需要逗号,但尾部不需要逗号。例如,在 Java 中,我会使用 StringBuilder 并在构建字符串后删除末尾的逗号。我如何在 C++ 中执行此操作?

auto iter = keywords.begin();
for (iter; iter != keywords.end( ); iter++ )
{
out << *iter << ", ";
}
out << endl;

我最初尝试插入以下 block 来执行此操作(将逗号打印移至此处):

if (iter++ != keywords.end())
out << ", ";
iter--;

最佳答案

使用中缀迭代器:

// infix_iterator.h 
//
// Lifted from Jerry Coffin's 's prefix_ostream_iterator
#if !defined(INFIX_ITERATOR_H_)
#define INFIX_ITERATOR_H_
#include <ostream>
#include <iterator>
template <class T,
class charT=char,
class traits=std::char_traits<charT> >
class infix_ostream_iterator :
public std::iterator<std::output_iterator_tag,void,void,void,void>
{
std::basic_ostream<charT,traits> *os;
charT const* delimiter;
bool first_elem;
public:
typedef charT char_type;
typedef traits traits_type;
typedef std::basic_ostream<charT,traits> ostream_type;
infix_ostream_iterator(ostream_type& s)
: os(&s),delimiter(0), first_elem(true)
{}
infix_ostream_iterator(ostream_type& s, charT const *d)
: os(&s),delimiter(d), first_elem(true)
{}
infix_ostream_iterator<T,charT,traits>& operator=(T const &item)
{
// Here's the only real change from ostream_iterator:
// Normally, the '*os << item;' would come before the 'if'.
if (!first_elem && delimiter != 0)
*os << delimiter;
*os << item;
first_elem = false;
return *this;
}
infix_ostream_iterator<T,charT,traits> &operator*() {
return *this;
}
infix_ostream_iterator<T,charT,traits> &operator++() {
return *this;
}
infix_ostream_iterator<T,charT,traits> &operator++(int) {
return *this;
}
};
#endif

用法类似于:

#include "infix_iterator.h"

// ...
std::copy(keywords.begin(), keywords.end(), infix_iterator(out, ","));

关于c++ - 如何打印以逗号分隔的元素列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com