【问题标题】:How can I remove the last comma? [duplicate]如何删除最后一个逗号? [复制]
【发布时间】:2026-01-31 08:10:01
【问题描述】:

程序显示一个数字列表。 例如:

1、3、5、3、4、3,

我需要这样:

1、3、5、3、4、3

我尝试了if/else 语句,但效果不佳。

s.push_back(0);
cout << "s: ";
cout << 0 << ", ";
s.push_back(v[0]);
cout << s.back() << ", ";

for(int i=2; i<=10; i++) {
    s.push_back(alpha * v[i-1] + (1 - alpha) * s.back());
    if (i == s.back() - 1)
        cout << s.back() << endl;
    else
        cout << s.back() << ", " << "";

我得到了正确的输出。只是无法摆脱最后一个逗号。

【问题讨论】:

标签: c++


【解决方案1】:

通过更新分隔符变量来避免if

#include <iostream>
#include <vector>
#include <functional>

int main() {
  std::vector<int> example = {1,2,3,4,5};

  std::string delim = "";

  for(const auto& e:example){
    std::cout << delim << e;
    delim = ", ";
  }

  return 0;
}

【讨论】:

  • 我同意if 更具可读性,但我发现它很有趣,因为我们在编程中多次处理这个问题——找到一种完全避免if 的方法是有趣。
  • @StoryTeller:我不得不同意你的观点,所以我编辑了它。
【解决方案2】:

如果您将逗号放在除第一个元素之外的每个元素之前,您将实现这一点

 if(first){
    out << n;
    first = false;
 }else{
    out << "," << n;
 }

【讨论】:

  • 注意这个答案,因为你在职业生涯中会多次遇到这个问题。我已经数不清我在不同的版本中遇到过多少次了。
【解决方案3】:

有三种方式:

  1. 在元素之前打印逗号,除非它是第一个:

    bool first = true;
    for ...
       if (!first) 
           cout << ", ";
       cout << s.back();
       first = false;
    
  2. 类似,但没有布尔值:

    const char * prefix = "";
    for ...
          cout << prefix << s.back();
          prefix = ", ";
    
  3. 检查索引:

     for ...  
         ....
         if (i > 0)
            cout << ", ";
         cout << s.back();
    

    当在每个元素的末尾打印逗号时,索引检查也可以在最后一个元素上工作。

  4. 打印循环外的第一个元素,其余元素将在循环中以分隔符为前缀(注意这对空列表不起作用)。

【讨论】:

  • 第四个选项是在进入循环之前输出第一个不带分隔符的向量元素,然后让循环迭代在后续元素前面输出分隔符。 cout &lt;&lt; s.back(); for (...) { cout &lt;&lt; ", " &lt;&lt; s.back(); }
  • @RemyLebeau 好点