在c ++中显示字符串的所有排列不适用于超过7的字符串长度

时间:2015-08-18 20:54:23

标签: c++ permutation

所以我使用这段代码来显示给定输入字符串的所有排列。 但是这段代码不适用于长度超过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;
}

1 个答案:

答案 0 :(得分:2)

代码是正确的。您遇到的问题是,您运行的任何在线编译器都会为您提供有限的缓冲区空间。例如,在coliru上,简单的程序:

int main()
{
    for (int i = 0; i < 50000; ++i) std::cout << i << '\n';
}

不打印50,000个号码。它结束于:

24082
24083
240

我想你会看到同样的行为。正如Benjamin Lindley所暗示的那样,它也可能是一个时间问题。无论哪种方式,它不是代码 - 它是环境。

虽然技术上正确,但您应该将其交叉发布到CodeReview,因为可以大大改进解决方案。