【问题标题】:How to print a comma between elements of a set [duplicate]如何在集合的元素之间打印逗号[重复]
【发布时间】:2018-09-07 08:58:57
【问题描述】:

我正在处理一项任务,我创建了一个函数来获取电源组并且它有效,但是如果设置是这样的:

{1,2,3}

打印出来:

{{},{1,},{2,},{1,2,},{3},{1,3},{2,3},{1,2,3}}

我不能删除这些逗号变成这样:

{{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}}

这个函数的源代码:

void power_set(int set1[], int set1_length) {
    int power = pow(2,set1_length);

    cout << "{";
    for (int i = 0; i < power; i++) {
        cout << "{";
        for (int j = 0; j < set1_length; j++ ) {
            if(i & (1<<j)) {
                cout << set1[j];
                if (j < set1_length - 1) cout << ",";
            }
        }
        cout << "}";
        if (i != power - 1)cout << ",";
    }
    cout << "}";
}

【问题讨论】:

  • 可疑巨魔..

标签: c++ set comma


【解决方案1】:

解决此问题的一种方法是跟踪您是否打印了一组中的第一个数字。而不是:

for (int j = 0; j < set1_length; j++ ) {
    if(i & (1<<j)) {
        cout << set1[j];
        if (j < set1_length - 1) cout << ",";
    }
}

您可以使用标志仅打印从集合中的第二个数字开始的逗号:

bool first = true;
for (int j = 0; j < set1_length; j++ ) {
    if(i & (1<<j)) {
        if (first) {first = false;}
        else {cout << ",";}
        cout << set1[j];
    }
}

【讨论】:

  • 结果:{{,,},{1,,},{,2,},{1,2,},{,,3},{1,,3},{, 2,3},{1,2,3}}
  • @AbdelrahmanNasr 你用我引用的第二个代码块替换了你的原始代码吗?我得到:{{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}}。确保只替换错误的部分。
  • 现在我得到了这个:{{},{1},{2},{1,2},{3},{1,3},{2,3},{1, 2,3}}
  • 谢谢你刚刚成为我在本站第一个问题的第一个正确答案^^!
【解决方案2】:

检查你的 if 语句:

if (j < set1_length && (i & (1 << (j+1)))) cout << ",";

【讨论】:

  • 它给了我这个结果:{{},{1,},{2,},{1,2,},{3,},{1,3,},{2, 3,},{1,2,3,}}
猜你喜欢
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
相关资源
最近更新 更多