我编写了以下C ++代码来生成输入字符串的下一个逆字母顺序。但是我得到错误说:没有匹配函数用于调用'反向':候选模板被忽略:推导出参数的冲突类型 ' _BidirectionalIterator' (' std :: __ 1 :: basic_string' vs.' int') 反向(_BidirectionalIterator __ first,_BidirectionalIterator __last)。 我无法理解错误消息,也不知道如何调整它。谁能帮到我这里?谢谢!
#include<iostream>
#include<string>
using namespace std;
string gen(string A,int n){
int i, j;
for(i= n-1;(i > 0 && A[i-1]<A[i]);i--)
; // empty statement
if (i == 0)
return 0;
for (j = i+1; j < n && A[i-1] > A[j]; j++)
; // empty statement
swap(A[i-1],A[j-1]); // swap values in the two entries
string subline =A.substr(i,n-i);
subline=reverse(subline,n-i);
A=A.substr(0,i-1)+subline;
return A;
}
void swap(int &a,int &b)
{
int temp=b;
b=a;
a=temp;
}
string reverse(string k,int length)
{
for(int m=0;m<length/2;m++)
{
char temp=k[length-1-m];
k[length-1-m]=k[m];
k[m]=temp;
}
return k;
}
int main(void)
{
cout<<"Please enter a string"<<endl;
string arrayperm;
cin>>arrayperm;
int length=arrayperm.length();
string newone=gen(arrayperm,length);
cout<<"The new array is: "<<newone<<endl;
return 0;
}
答案 0 :(得分:0)
如果您将反向函数移动到文件顶部并将其嵌套在namespace
中,则可以编译代码,例如:
namespace oops{
string reverse(string k, int length)
{
for (int m = 0; m < length / 2; m++)
{
char temp = k[length - 1 - m];
k[length - 1 - m] = k[m];
k[m] = temp;
}
return k;
}
}
然后当你调用它时:subline = oops::reverse(subline, n - i);
但是,正如目前实施的那样,它会运行,但不会反转string
。我建议不要重新发明轮子:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(void)
{
string arrayperm = "Lorem ipsum";
string newone(arrayperm.size(), '\0');
reverse_copy(arrayperm.begin(), arrayperm.end(), newone.begin());
cout << "The new array is: " << newone << endl;
return 0;
}