【发布时间】:2021-11-21 04:44:25
【问题描述】:
我对C++有点陌生,因此,我不知道这个错误的原因是什么,我试图递归解决edit distance问题,但是,这个错误出现了。
错误:调用的对象类型“int”不是函数或函数指针 返回 __comp(__b, __a) ? __b : __a;
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int distance(string, string, int, int);
int cost(string, string, int, int);
int main(){
string v = "love";
string v2 = "hate";
cout<<distance(v, v2, v.size()-1, v2.size()-1);
}
int distance(string v, string v2, int a, int b)
{
if (a==0) return b;
if (b==0) return a;
return min(
distance(v, v2, a, b-1)+1,
distance(v, v2, a-1, b)+1,
distance(v, v2, a-1, b-1)+cost(v, v2, a, b));
}
int cost(string v, string v1, int a, int b)
{
if (v[a]==v1[b]) return 0;
return 1;
}
【问题讨论】:
-
std::min(a, b, c)->std::min({a, b, c}). -
顺便说一句,如果你要使用
std::min(...),也不要忘记包含<algorithm>。 -
我建议写
using std::min;而不是using namespace std;。另见Why is "using namespace std;" considered bad practice? -
[OT]:通过 const 引用而不是通过值传递(未修改的)字符串,以避免不必要的副本。
-
通过猜测语言规则进行编程并不是一个好主意。为什么你认为
min(a, b, c)应该有效?
标签: c++ algorithm debugging edit-distance