2010-08-22 3 views
-5

J'ai un programme qui crée des combinaisons de chaînes comme si je suis entré dans l'entrée abc il me donne une sortie comme bcacababcpermutations et combinaisons

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char str[15]; 
    int i,j,n; 

    printf("Enter a string"); 
    scanf("%s",str); 
    n=strlen(str); 

    for(i=0;i<n;i++) 
    { 
     str[n]=str[0]; 

     for(j=0;j<n;j++)  
     { 
      str[j]=str[j-1]; 
     } 
    str[n]='\0'; 
    printf("\n %s \n",str); 
    } 
    return 0; 
} 

Mais je veux un programme qui me donne toutes les combinaisons possibles d'un string alors quels sont les changements que je dois faire?

+0

http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations –

+1

http: // stackoverflow. com/questions/361/generate-list-of-all-possible-permutations-of-a-string –

+1

Sauf si le nombre de lettres dans 'str' est fixé à une petite valeur (et 14 comme dans votre code n'est pas très petit), vous feriez mieux d'utiliser la récursion à un moment donné, sinon cela pourrait devenir fastidieux. –

Répondre

7

Utilisez le Exeter algorithm

#include <stdio.h> 
#include <string.h> 

void swap(char *x, char *y){ 
    char w; 
    w = *x; 
    *x = *y; 
    *y = w; 
} 

void permute(char *str, int start, int n){ 
    int i; 

    if(start == n-1) 
     printf("%s\n", str); 
    else 
     for(i = start; i < n; i++){ 
      swap(str+i, str+start); 
      permute(str, start+1, n); 
      swap(str+i, str+start); 
     } 
} 

int main(){ 

    char line[10], str[10]; 
    int n, op; 

    printf("Enter a string: "); 
    if(fgets(line, 10, stdin) == NULL){ 
     printf("Ops! Early stop\n"); 
     return 1; 
    } 


    if(sscanf(line, "%s", str) != 1){ 
     printf("Next time put some valid characters\n"); 
     return 1; 
    } 

    n = strlen(str); 
    permute(str, 0, n); 
    return 0; 
} 

Note: Cet algorithme génère toutes les permutations possibles