设计一个C加加程序,程序运行时从键盘上输入一行字符(长度不超过10,没有重复字符),使用递归函数将这些字符的所有排列可能输出到屏幕上。
时间: 2024-12-25 08:23:42 浏览: 11
设计一个C++程序来生成输入字符串所有排列的递归函数可以这样做。首先,我们需要一个辅助函数`permuteHelper`,用于递归地生成排列,然后主函数`permute`用于获取用户输入并调用这个辅助函数。
```cpp
#include <iostream>
#include <string>
#include <algorithm>
// 辅助函数,生成给定字符串的排列
void permuteHelper(std::string str, int start, std::vector<std::string>& result) {
if (start == str.length()) {
result.push_back(str);
} else {
for (int i = start; i < str.length(); ++i) {
// 交换元素
std::swap(str[start], str[i]);
// 递归调用,处理剩余字符
permuteHelper(str, start + 1, result);
// 撤销交换,回溯
std::swap(str[start], str[i]); // 回溯操作
}
}
}
// 主函数,获取用户输入并打印排列结果
void permute() {
std::string input;
std::cout << "请输入一个长度不超过10,没有重复字符的字符串: ";
std::cin >> input;
std::sort(input.begin(), input.end()); // 排序以消除重复字符
if (input.length() > 10) {
std::cerr << "输入过长,请确保长度不超过10。\n";
return;
}
std::vector<std::string> result;
permuteHelper(input, 0, result);
std::cout << "输入字符的所有排列:\n";
for (const auto& permutation : result) {
std::cout << permutation << "\n";
}
}
int main() {
permute();
return 0;
}
```
在这个程序中,我们首先获取用户的输入并确保没有重复字符。然后,我们使用`permuteHelper`函数,通过递归地尝试所有可能的字符位置交换,生成并收集所有的排列。最后,在主函数中显示所有的排列。
阅读全文