C++ For循环打印一个额外的逗号

C++ For循环打印一个额外的逗号,c++,for-loop,C++,For Loop,上面的代码打印不正确。它应该打印集合B:{1,2,3},但它会打印一个额外的逗号==>集合B:{1,2,3,} 任何帮助都将不胜感激。提前谢谢 使用 cout<<"Set B : {"; for(i=0;i<b;i++) { cout<<setB[i]; cout<<","; } cout<<" }"<<endl; 我更改了你的算法: 意思是:输入数字,然后加逗号 现在它的意思是:如果我身后有一个数字,用逗号,然

上面的代码打印不正确。它应该打印集合B:{1,2,3},但它会打印一个额外的逗号==>集合B:{1,2,3,}

任何帮助都将不胜感激。提前谢谢

使用

cout<<"Set B : {";
for(i=0;i<b;i++)
{
    cout<<setB[i];
    cout<<",";
}
cout<<" }"<<endl;
我更改了你的算法:

意思是:输入数字,然后加逗号

现在它的意思是:如果我身后有一个数字,用逗号,然后用数字

以前,当你打印一个数字时,你总是打印一个逗号,所以你有一个额外的逗号。

使用

cout<<"Set B : {";
for(i=0;i<b;i++)
{
    cout<<setB[i];
    cout<<",";
}
cout<<" }"<<endl;
我更改了你的算法:

意思是:输入数字,然后加逗号

现在它的意思是:如果我身后有一个数字,用逗号,然后用数字


以前,打印数字时总是打印一个逗号,因此有一个额外的逗号。

循环代码打印一对数字和逗号。尝试使用此选项:

cout << "Set B : {";

for (i = 0; i < b; ++i) {
  if (i > 0) cout << ",";

  cout << setB[i];
}

cout << " }" << endl;

循环代码打印一对数字和逗号。尝试使用此选项:

cout << "Set B : {";

for (i = 0; i < b; ++i) {
  if (i > 0) cout << ",";

  cout << setB[i];
}

cout << " }" << endl;

你的循环正在执行cout你的循环正在执行cout我个人更喜欢这个解决方案。首先打印第一个元素,然后打印第二个元素


警告!:如果阵列是空的,这将不起作用。

我个人更喜欢这个解决方案。首先打印第一个元素,然后打印第二个元素


警告!:如果数组为空,这将不起作用。

对于For循环的每次迭代,程序将在For循环内执行所有内容。因此,循环遍历并打印集合中的每个数字,然后打印一个逗号

问题是,即使在最后一次运行循环时,它也会打印一个逗号,因为它是循环的一部分

cout <<"Set B : {" << setB[0];
for(i = 1; i < b; i++)
{
    cout << ",";
    cout<<setB[i];
}
cout  << " }" << endl;

此代码的运行方式与此完全相同,除了最后一次运行循环的第二次,它不会打印逗号。不必太花哨

对于For循环的每次迭代,程序将在For循环内执行所有内容。因此,循环遍历并打印集合中的每个数字,然后打印一个逗号

问题是,即使在最后一次运行循环时,它也会打印一个逗号,因为它是循环的一部分

cout <<"Set B : {" << setB[0];
for(i = 1; i < b; i++)
{
    cout << ",";
    cout<<setB[i];
}
cout  << " }" << endl;

此代码的运行方式与此完全相同,除了最后一次运行循环的第二次,它不会打印逗号。不必太花哨

如果可以使用STL,请尝试以下操作:

cout << "Set B : {";
for(i = 0; i < b; i++){
    cout << setB[i];
        if (i < (b-1))
            cout << ",";
}
cout << " }" << endl;

如果可以使用STL,请尝试以下操作:

cout << "Set B : {";
for(i = 0; i < b; i++){
    cout << setB[i];
        if (i < (b-1))
            cout << ",";
}
cout << " }" << endl;

我通常处理这些循环的方法是,在项目列表之间放置空格或逗号,如下所示:

#include <iterator>
#include <iostream>

int main() {
    int setB[]{1,2,3};
    std::cout << "Set B : { ";
    for(auto i = std::begin(setB), e = std::end(setB); i != e;) {
        std::cout << *i;
        for(++i; i !=e; ++i) { std::cout << ", " << *i; }
    }
    std::cout << " }" << std::endl;
    return 0;
}
0, 1, 2, 3, 4
如果要提高速度效率,可以在进入循环之前使用If输出第一项,以如下方式输出其余项:

#include <iterator>
#include <iostream>

int main() {
    int setB[]{1,2,3};
    std::cout << "Set B : { ";
    for(auto i = std::begin(setB), e = std::end(setB); i != e;) {
        std::cout << *i;
        for(++i; i !=e; ++i) { std::cout << ", " << *i; }
    }
    std::cout << " }" << std::endl;
    return 0;
}
0, 1, 2, 3, 4

我通常处理这些循环的方法是,在项目列表之间放置空格或逗号,如下所示:

#include <iterator>
#include <iostream>

int main() {
    int setB[]{1,2,3};
    std::cout << "Set B : { ";
    for(auto i = std::begin(setB), e = std::end(setB); i != e;) {
        std::cout << *i;
        for(++i; i !=e; ++i) { std::cout << ", " << *i; }
    }
    std::cout << " }" << std::endl;
    return 0;
}
0, 1, 2, 3, 4
如果要提高速度效率,可以在进入循环之前使用If输出第一项,以如下方式输出其余项:

#include <iterator>
#include <iostream>

int main() {
    int setB[]{1,2,3};
    std::cout << "Set B : { ";
    for(auto i = std::begin(setB), e = std::end(setB); i != e;) {
        std::cout << *i;
        for(++i; i !=e; ++i) { std::cout << ", " << *i; }
    }
    std::cout << " }" << std::endl;
    return 0;
}
0, 1, 2, 3, 4

另一种方式,无需额外分支:

int main()
{
    int n;

    std::cin >> n;

    int i = 0;

    if(i < n) // check for no output
        std::cout << i;

    for(++i; i < n; ++i) // rest of the output (if any)
        std::cout << ", " << i; // separate these
}

另一种方式,无需额外分支:

int main()
{
    int n;

    std::cin >> n;

    int i = 0;

    if(i < n) // check for no output
        std::cout << i;

    for(++i; i < n; ++i) // rest of the output (if any)
        std::cout << ", " << i; // separate these
}

我真的很喜欢推广使用a来编写声明性代码,而不是以命令式风格嵌套for if语句

std::cout << "Set B : {";
const char* sep = "";
for (const auto& e : setB) {
    std::cout << sep << setB[i];
    sep = ", ";
}
std::cout <<" }" << std::endl;

我真的很喜欢推广使用a来编写声明性代码,而不是以命令式风格嵌套for if语句

std::cout << "Set B : {";
const char* sep = "";
for (const auto& e : setB) {
    std::cout << sep << setB[i];
    sep = ", ";
}
std::cout <<" }" << std::endl;

为什么您希望打印的逗号少于元素?可能的重复为什么您希望打印的逗号少于元素?可能的重复也会打印一个额外的逗号。不幸的是,这会在每个元素后打印逗号。请看,有一个带有自定义迭代器的解决方案。有一个std::experimental::ostream joiner,可以与std::copy一起使用来打印它。它还打印一个额外的逗号。不幸的是,这会在每个元素后打印逗号。请看,有一个使用自定义迭代器的解决方案有一个std::experimental::ostream joiner,可以与std::copy一起使用来打印此文件。+1在这种情况下工作得很好,但通常必须小心-如果setB为空,setB[0]将是未定义的行为。+1在这种情况下工作得很好,但在一般情况下必须小心-setB[0]如果setB为空,则为未定义行为。同意。我在这里列出的代码没有经过任何优化。只是为了澄清我的解释。我同意。我在这里列出的代码没有经过任何优化。只是为了澄清我的解释。