我有一个程序可以创建一些字符串组合,就像我输入了输入abc
一样,它输出为bca
cab
abc
#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;
}
但我想要一个程序,它给了我所有可能的字符串组合 那么我需要做出哪些改变?
答案 0 :(得分:7)
#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;
}
注意:此算法会生成所有可能的排列