从';int';至';int*'; 我想解决一个LCS问题(最长的公共子序列),我试图通过引用维基百科给出的解释和PASCAL代码来在C++中制作自己的代码。p>
我的最终结果是:从';int';至';int*'; 我想解决一个LCS问题(最长的公共子序列),我试图通过引用维基百科给出的解释和PASCAL代码来在C++中制作自己的代码。p>,c++,C++,我的最终结果是: #include <iostream> #include <algorithm> using namespace std; int LCS(int a[100], int b[100], int m, int n); int main() { int n, m, i, k, x[100], y[100]; cout << "n i m: " << endl; cin >> n >> m; cou
#include <iostream>
#include <algorithm>
using namespace std;
int LCS(int a[100], int b[100], int m, int n);
int main()
{
int n, m, i, k, x[100], y[100];
cout << "n i m: " << endl;
cin >> n >> m;
cout << "n array: " << endl;
for(i=1;i<=n;i++)
cin >> x[i];
cout << "m array: " << endl;
for(i=1;i<=m;i++)
cin >> y[i];
k = LCS(x[100], y[100], m, n);
cout << k << endl;
return 0;
}
int LCS(int a[100], int b[100], int m, int n)
{
int c[m][n], i, j;
for(i=0;i<=m;i++)
c[i][0] = 0;
for(i=0;i<=n;i++)
c[0][i] = 0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i] == b[j])
{
c[i][j] = c[i-1][j-1]+1;
}
else
c[i][j] = max(c[i][j-1], c[i-1][j]);
}
}
return c[m][n];
}
我并不真正喜欢c/c++编程,我想知道我的错误在哪里,为什么会发生,以及如何修复它。谢谢。问题已经解决了
k = LCS(x[100], y[100], m, n);
换成
k = LCS(x, y, m, n);
问题是一致的
k = LCS(x[100], y[100], m, n);
换成
k = LCS(x, y, m, n);
LCS接受100整数的数组。您传递它一个int。这在C++中无效。顺便说一句,这只是这段代码中许多问题之一。举个例子,这是:
int c[m][n]
在C++中也是无效的。
如果您不熟悉一种语言,最好从小代码片段开始,一步一步地迭代构建。这是一种更好的获得理解的方法,而不是从另一种语言翻译一大块代码,然后祈祷它能够编译和工作。LCS接受100个整数的数组。您传递它一个int。这在C++中无效。顺便说一句,这只是这段代码中许多问题之一。举个例子,这是:
int c[m][n]
在C++中也是无效的。
如果您不熟悉一种语言,最好从小代码片段开始,一步一步地迭代构建。这是一种更好的理解方法,而不是从另一种语言翻译一大块代码,然后交叉手指让它编译和工作。只需传递数组名称即可 这个 不是这个
LCS(x[100], y[100], m, n);
只需传递数组名 这个 不是这个
LCS(x[100], y[100], m, n);
改变k=LCS(x[100],y[100],m,n)代码>到k=LCS(x,y,m,n)代码>改变k=LCS(x[100],y[100],m,n)代码>到k=LCS(x,y,m,n)代码>
应该是
k = LCS(x, y, m, n);
您应该传入一个int数组,但实际上是传入索引为100的int
不过,我看到了一些其他的错误
for(i=1...
在C/C++中,数组的索引为0。对于(i=0
我
应该是
k = LCS(x, y, m, n);
您应该传入一个int数组,但实际上是传入索引为100的int
不过,我看到了一些其他的错误
for(i=1...
数组在C/C++中的索引为0
i调用函数的代码混淆了:
k = LCS(x[100], y[100], m, n);
这将在第一个参数中传递x的第101个条目,在第二个参数中传递y的第101个条目。可能函数希望您传递数组的地址,因此它应该是LCS(x,y,m,n)
您调用函数的代码混淆了:
k = LCS(x[100], y[100], m, n);
这将在第一个参数中传递x的第101个条目,在第二个参数中传递y的第101个条目。可能函数希望您传递数组的地址,因此它应该是LCS(x,y,m,n)
在C/C++中,不能像这样在堆栈(或任何地方)上声明可变长度数组。您需要在堆上分配它们或使用恒定长度数组
在C/C++中,您不能在堆栈(或任何地方)上声明可变长度数组。您需要在堆上分配它们或使用恒定长度数组。至少有一部分问题是这一行:
int c[m][n], i, j;
不能使用变量声明数组的大小。您需要执行以下操作:
int **c = new int[m][n];
然后最后,
int ret = c[m][n];
delete [][] c;
return ret;
至少部分问题在于这一行:
int c[m][n], i, j;
不能使用变量声明数组的大小。您需要执行以下操作:
int **c = new int[m][n];
然后最后,
int ret = c[m][n];
delete [][] c;
return ret;
将k=LCS(x[100],y[100],m,n);
更改为k=LCS(x,y,m,n);
将k=LCS(x[100],y[100],m,n);
更改为k=LCS(x,y,m,n);
作为旁注,尝试使用x[100]将是一个超出范围的整数。作为旁注,尝试使用x[100]C99标准允许可变长度数组,所以第一行是有效的。我不知道,结果MS Visual C++不支持它们。C99标准允许可变长度数组,所以第一行是有效的。我不知道这是因为MS Visual C++不支持它们。