亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用逗號C+打印列表

用逗號C+打印列表

C++
PIPIONE 2019-06-26 17:05:30
用逗號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+項目。我不僅得到了答案,而且有機會思考解決這樣一個問題的不同方法。太棒了。
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

使用infix_iterator:

// 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, ","));


查看完整回答
反對 回復 2019-06-26
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

因為每個人都決定用while循環來完成這個任務,所以我將給出一個使用for循環的例子。

for (iter = keywords.begin(); iter != keywords.end(); iter++) {
  if (iter != keywords.begin()) cout << ", ";
  cout << *iter;}


查看完整回答
反對 回復 2019-06-26
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

在即將到來的實驗C+17就緒編譯器中,您可以使用std::experimental::ostream_joiner:

#include <algorithm>#include <experimental/iterator>#include <iostream>#include <iterator>int main(){
    int i[] = {1, 2, 3, 4, 5};
    std::copy(std::begin(i),
              std::end(i),
              std::experimental::make_ostream_joiner(std::cout, ", "));}

活生生的例子GCC 6.0 SVNclang 3.9 SVN


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 504 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號