用逗号C+打印列表

用逗号C+打印列表

我知道如何在其他语言中这样做,但不知道C+,这是我不得不在这里使用的。

我有一套字符串,我要打印在一个列表中,他们需要一个逗号之间的每一个,但不是尾随逗号。例如,在java中,我会使用一个字符串构建器,并在构建字符串之后删除末尾的逗号。如何在C+中实现?

auto iter = keywords.begin();for (iter; iter != keywords.end( ); iter++ ){

    out << *iter << ", ";}out << endl;

我最初尝试插入这个块来完成它(在这里移动逗号打印)

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

我讨厌那些小事把我绊倒。

编辑:谢谢大家。这就是为什么我在这里发布这样的东西。这么多好的答案,并以不同的方式处理。在完成了一个学期的Java和程序集(不同的课程)之后,我不得不在4天内完成一个C+项目。我不仅得到了答案,而且有机会思考解决这样一个问题的不同方法。太棒了。


PIPIONE
浏览 453回答 3
3回答

拉莫斯之舞

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

侃侃尔雅

因为每个人都决定用while循环来完成这个任务,所以我将给出一个使用for循环的例子。for&nbsp;(iter&nbsp;=&nbsp;keywords.begin();&nbsp;iter&nbsp;!=&nbsp;keywords.end();&nbsp;iter++)&nbsp;{ &nbsp;&nbsp;if&nbsp;(iter&nbsp;!=&nbsp;keywords.begin())&nbsp;cout&nbsp;<<&nbsp;",&nbsp;"; &nbsp;&nbsp;cout&nbsp;<<&nbsp;*iter;}

qq_遁去的一_1

在即将到来的实验C+17就绪编译器中,您可以使用std::experimental::ostream_joiner:#include&nbsp;<algorithm>#include&nbsp;<experimental/iterator>#include&nbsp;<iostream>#include&nbsp;<iterator>int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i[]&nbsp;=&nbsp;{1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5}; &nbsp;&nbsp;&nbsp;&nbsp;std::copy(std::begin(i), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::end(i), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::experimental::make_ostream_joiner(std::cout,&nbsp;",&nbsp;"));}活生生的例子GCC 6.0 SVN和clang 3.9 SVN
打开App,查看更多内容
随时随地看视频慕课网APP