2013-07-14 3 views
1

문자의 문자열을 취하고 모든 가능한 조합을 인쇄하는 프로그램을 만들었습니다. 그러나 각 콤보를 화면에 인쇄하는 대신 목록이나 배열에 기록하는 방법이 있습니까? 왜냐하면 나는 그들을 보지 않고 콤보 중 일부를 조작 할 수 있어야하기 때문이다.C - 배열이나 목록의 조합 인쇄

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; 
} 
+0

힌트 : 'k'글자가 길고 순열의 수가 k라고 가정 해 봅시다. = k (k-1) (k-2) ... (3) (2) (1)'그래서 k 크기의 문자열 배열이 필요합니다. 먼저 strlen을 사용하여 길이를 계산 한 다음 malloc을 사용하여 배열을 할당 한 다음 배열을 채우고 원하는 것을 사용하여 순열을 실행합니다 (재귀는 괜찮습니다). 이 힌트를 사용하여 프로그램을 만들려고합니다. 문제가 있으면 더 도움이 될 것입니다 :-) –

답변

0

그냥 다음에 permuation()을 변경 :

n은 배열의 permuted_strings의 다음 사용되지 않는 요소의 인덱스입니다
int permutation(char *c, int d, int e, int n, char **permuted_strings) 

. permuted_strings은 k의 배열이어야합니다! 주석에 표시된대로 문자열의 길이가 k 인 경우 요소. 조건 (d == e)이 충족되면 permuted_strings [n]에 문자열을 저장하고 n을 1 씩 증가시켜이 값을 n의 새 값으로 반환해야합니다. permutation() 함수는 항상 n의 현재 값을 반환해야하고, n은 순차 호출()에 대한 후속 호출이 n의 올바른 값을 알 수 있도록 호출 될 때 permutation()의 반환 값으로 재설정되어야합니다. 다음 문자열을 저장하십시오.