C - 在阵列或列表中打印组合

时间:2013-07-14 00:20:46

标签: c arrays printing permutation

我创建了一个带有一串字符的程序,并打印出所有可能的组合。但是,有没有办法在列表或数组中记录每个组合而不是仅仅在屏幕上打印它们?因为我需要能够操纵一些组合而不仅仅是看它们。

void swap( char *a, char *b ){
    char tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

void permutation( char *c, int d, int e ){
    int f;

    if( d == e )
        printf( "%s\n", c );
    else{
        for( f = d; f <= e; f++ ){
            swap( ( c + d ), ( c + f ) );
            permutation( c, d + 1, e );
            swap( ( c + d ), ( c + f ) );
        }
    }
}

int main(){
    char wordInput[25];
    int len, arrLen, f;

    printf( "\nEnter text: " );
    gets( wordInput );
    len = strlen( wordInput );
    arrLen = len - 1;

    permutation( wordInput, 0, arrLen );

    return 0;
}

1 个答案:

答案 0 :(得分:0)

只需将permuation()更改为以下内容:

int permutation( char *c, int d, int e, int n, char **permuted_strings)

其中n是数组permuted_strings中下一个未使用元素的索引。 permuted_strings应该是k的数组!如果您的字符串长度为k,则为元素,如注释中所示。如果满足条件(d == e),则应将字符串保存在permuted_strings [n]并将n递增1并将此值作为n的新值返回。 permutation()函数应始终返回n的当前值,并且在调用n时应将n重置为permutation()的返回值,以便后续调用permutation()知道n的正确值,即在何处存储下一个字符串。