2014-11-23 3 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

вы храните тот же адрес i.e из массива pms для всех элементов. вы должны создать память для хранения этих комбинаций и скопировать каждый комбинационный массив вместо назначения. – radar

+0

Ознакомьтесь с разницей между массивами и указателями. Также прочитайте, как массив заполняется в общем и C- "string" s (с нулевым завершением 'char'-массивы) в частности (см.' Str * '-семейство funcitons на этом). – alk

Смежные вопросы