C语言,输入一个字符串(长度小于10,字符不重复)以回车结束,输出所有字符的排列可能,每行一个(顺序不限)例如,输入abc, 输出abc acb cba cab bac bca
时间: 2024-04-30 16:19:19 浏览: 106
以下是使用递归实现的 C 语言代码:
```c
#include <stdio.h>
#include <string.h>
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
void permutation(char *str, int start, int end) {
if (start == end) {
printf("%s\n", str);
return;
}
for (int i = start; i <= end; i++) {
swap(str + start, str + i);
permutation(str, start + 1, end);
swap(str + start, str + i);
}
}
int main() {
char str[11];
fgets(str, 11, stdin);
int len = strlen(str);
if (str[len - 1] == '\n') {
str[len - 1] = '\0';
len--;
}
permutation(str, 0, len - 1);
return 0;
}
```
代码中使用 `swap` 函数来交换两个字符,使用 `permutation` 函数来进行递归的排列操作。首先判断是否已经排列到了字符串的末尾,如果是则输出当前排列结果,否则对于当前未确定位置的字符,枚举其可能的所有情况(即与当前位置后面的所有字符交换),并递归进行下一步排列操作。最后在 `main` 函数中读入字符串并调用 `permutation` 函数进行排列操作。
阅读全文