所以我使用这段代码来显示给定输入字符串的所有排列。 但是这段代码不适用于长度超过7的字符串。任何建议/解决方案都会非常有用。
#include<iostream>
using namespace std;
/* Function to swap two characters */
void swap(char& a, char& b)
{
char temp;
temp = a;
a = b;
b = temp;
}
/* Function to obtain permutations of string characters */
void permutation(string s,int i,int n)
{
int j;
if (i == n)
cout << s << "\t";
else
{
for (j = i; j < s.length(); j++)
{
swap(s[i],s[j]);
permutation(s, i + 1, n);
swap(s[i],s[j]);
}
}
}
int main()
{
string s;
cout << "Enter the amino acid string : ";
cin >> s;
cout << endl << "The permutations of the given string : " << endl;
permutation(s, 0, s.length() - 1);
cout << endl;
}
答案 0 :(得分:2)
代码是正确的†。您遇到的问题是,您运行的任何在线编译器都会为您提供有限的缓冲区空间。例如,在coliru上,简单的程序:
int main()
{
for (int i = 0; i < 50000; ++i) std::cout << i << '\n';
}
不打印50,000个号码。它结束于:
24082
24083
240
我想你会看到同样的行为。正如Benjamin Lindley所暗示的那样,它也可能是一个时间问题。无论哪种方式,它不是代码 - 它是环境。
†虽然技术上正确,但您应该将其交叉发布到CodeReview,因为可以大大改进解决方案。