2014-11-23 9 views
0

我想一個字符串的所有排列存儲在一個字符串數組...將一個字符串的所有可能的排列存儲在一個數組中?

現在我正在使用的代碼是:

# include <stdio.h> 


char *pms[] = {}; 
int pmsi = 0; 
void swap (char *x, char *y) 
{ 
    char temp; 
    temp = *x; 
    *x = *y; 
    *y = temp; 
} 

void permute(char *a, int i, int n) 
{ 
    int j; 
    if (i == n) { 
     pms[pmsi] = a; 
     pmsi++; 
    } 
    else 
    { 
     for (j = i; j <= n; j++) 
     { 
      swap((a+i), (a+j)); 
      permute(a, i+1, n); 
      swap((a+i), (a+j)); //backtrack 
     } 
    } 
} 

/* Driver program to test above functions */ 
int main() 
{ 
    char a[] = "ABC"; 
    permute(a, 0, 2); 
    int i; 
    for (i = 0 ; i < pmsi ; i++) { 
     printf("%s",pms[i]); 
    } 
    return 0; 
} 

但這種崩潰......

我不想打印出所有可能的排列......我想將它們存儲在一個數組中。

是否有修復?

回答

0

我能解決這個問題。

# include <stdio.h> 


char *pms[]; 
int pmsi = 0; 
void swap (char *x, char *y) 
{ 
    char temp; 
    temp = *x; 
    *x = *y; 
    *y = temp; 
} 

void permute(char *a, int i, int n) 
{ 
    int j; 
    if (i == n) { 
     pms[pmsi] = a; 
     pmsi++; 
    } 
    else 
    { 
     for (j = i; j <= n; j++) 
     { 
      swap((a+i), (a+j)); 
      permute(a, i+1, n); 
      swap((a+i), (a+j)); //backtrack 
     } 
    } 
} 

/* Driver program to test above functions */ 
int main() 
{ 
    char a[] = "ABC"; 
    permute(a, 0, 2); 
    int i; 
    for (i = 0 ; i < pmsi ; i++) { 
     printf("%s",pms[i]); 
    } 
    return 0; 
} 

這工作

但現在的排列沒有印刷..原來的字符串被打印出來。任何幫助?

+0

您正在爲所有元素存儲相同的地址,即在pms數組中。你應該創建內存來保存這些組合,並且複製每個組合數組而不是賦值。 – radar 2014-11-23 14:27:04

+0

閱讀有關數組和指針之間的區別。另請閱讀關於如何在通用和C-「字符串」(零終止'char'-數組)中填充數組(具體參見'str *' - 函數族)。 – alk 2014-11-23 14:55:03

相關問題