如何在集合的元素之间打印逗号

How to print a comma between elements of a set

我正在做一项作业,我做了一个函数来获取功率集并且它起作用了,但是如果设置是这样的:

{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 << "}";
}

检查你的 if 语句:

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

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

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];
    }
}