我的代码接受一个字符串并尝试检查是否存在输入字符串的排列。如果存在一个这样的字符串,则将其打印出来打印"没有答案"。但是我的代码没有& #39; t编译并显示错误。 错误是::没有匹配函数来调用' next_permutation(std :: string&)' | 完成这项任务的正确方法是什么?
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
string ans=next_permutation(s);// do permutation and store it in string ans
if(ans==s)// if there is no permutation possible original and ans will be same
cout<<"no answer "<<endl;
else
cout<<ans<<endl;// else print ans
}
}
答案 0 :(得分:0)
以下是函数next_permutation
的原型,您的调用语句string ans=next_permutation(s);
与其中任何一个都不匹配。
template <class BidirectionalIterator>
bool next_permutation (BidirectionalIterator first,
BidirectionalIterator last);
template <class BidirectionalIterator, class Compare>
bool next_permutation (BidirectionalIterator first,
BidirectionalIterator last, Compare comp);
更改您的代码,以检查排除的排气天气
if(next_permutation(s.begin(),s.end()))
cout<<s<<endl;
else
cout<<"no answer "<<endl;
如果您想要打印s
的所有排列,请执行此操作
while(next_permutation(s.begin(),s.end()))
{
cout<<s<<endl;
}
这是实现此目的的方法,尽管您可能需要更改逻辑才能完成任务
答案 1 :(得分:0)
编译错误很明显:
no matching function for call to 'next_permutation(std::string&)'|
编译器告诉您不存在函数next_permutation(std::string&)
。如果你看一下documentation,你会发现确实如此。有两个重载:
template< class BidirIt >
bool next_permutation( BidirIt first, BidirIt last );
template< class BidirIt, class Compare >
bool next_permutation( BidirIt first, BidirIt last, Compare comp );
它们都不匹配你的电话。
使用std::string::begin
和std::string::end
获取字符串中字符范围的迭代器。
答案 2 :(得分:0)
这是执行此操作的正确方法
// thanks to rajeev's code
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
bool ans=next_permutation(s.begin(),s.end());
if(!ans)
cout<<"no answer "<<endl;
else
cout<<s<<endl;
}
}
答案 3 :(得分:0)
此代码也解决了这个问题:
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
string original_s=s; // store the input string in a variable as original_s
next_permutation(s.begin(),s.end());// do permutation and s will be changed if permutation occurs
if(s==original_s)// if there is no permutation possible original and s will be same
cout<<"no answer "<<endl;
else
cout<<s<<endl;// else print ans
}
}