C语言中给定一个字符串 str,要求你输出该字符串的所有不同的排列。并按字典升序排列
时间: 2024-12-17 10:51:43 浏览: 8
在C语言中,生成一个字符串的所有不同排列通常需要借助回溯算法或者递归的方法。以下是一个简单的思路和示例代码,用于生成字符串的全排列并按照字典顺序排序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 排列函数
void permute(char *str, int l, int r) {
if (l == r)
printf("%s\n", str);
else {
for(int i = l; i <= r; i++) {
// 交换字符
char temp = str[l];
str[l] = str[i];
str[i] = temp;
// 递归处理剩余部分
permute(str, l + 1, r);
// 回溯:恢复原始字符位置
temp = str[l];
str[l] = str[i];
str[i] = temp;
}
}
}
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin); // 注意这里要移除fgets读取的换行符
str[strlen(str)-1] = '\0'; // 结束字符串
int n = strlen(str);
sort(str, str+n); // 先对字符串进行排序
permute(str, 0, n-1);
return 0;
}
```
在这个程序中,`permute`函数采用了深度优先搜索的思想,通过不断交换字符位置生成新的排列,并在完成后恢复原始状态。先对字符串进行排序,是为了确保结果按照字典序排列。
阅读全文