运行莱文斯坦代码时出现问题
There is a problem when I run Levenstein code
在对Levenstein进行编程时,存在一个问题。它是从互联网中提取的代码。
代码如下:
#define MIN3(a, b, c) ((a) < (b) ? ((a) < (c) ? (a) : (c)) : ((b) < (c) ? (b) : (c)))
int levenshtein(char *s1, char *s2) {
unsigned int s1len, s2len, x, y, lastdiag, olddiag;
s1len = strlen(s1);
s2len = strlen(s2);
unsigned int column[s1len + 1];
for (y = 1; y <= s1len; y++)
column[y] = y;
for (x = 1; x <= s2len; x++) {
column[0] = x;
for (y = 1, lastdiag = x - 1; y <= s1len; y++) {
olddiag = column[y];
column[y] = MIN3(column[y] + 1, column[y - 1] + 1, lastdiag + (s1[y - 1] == s2[x - 1] ? 0 : 1));
lastdiag = olddiag;
}
}
return(column[s1len]);
}
问题在于语句:unsigned int column[s1len + 1];
unsigned int s1len
:
错误:表达式必须具有常量值。
您遇到的问题是C++
语言不支持可变长度数组 (VLA(。您从互联网上收集的代码可能/可能写成C
,这是一种与C++
不同的语言,并且确实支持 VLA(自 C99 标准 IIRC 以来(。
可以使用std::vector
容器代替 VLA,"修复"代码以使用标准C++
。请务必包含<vector>
头文件:
#include <vector>
//.. .
// unsigned int column[s1len + 1]; // NOT standard C++
std::vector<unsigned int>column(s1len + 1);
您可以使用矢量的[]
运算符访问矢量的元素,因此不需要对代码进行任何其他更改。
注意:一些C++
实现确实支持 VLA(我认为 GNU g++ 就是一个支持 VLA 的实现( - 但标准不支持。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在java中解决这段代码时面临循环中的问题
- 将鼠标悬停在问题上时与预期">"相关的代码错误
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 读取最后一行代码算法 - c++ 时出现问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- Xcode 语义问题引用或以前定义的代码
- 需要以下代码的帮助,下面的代码有什么问题
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 如何在代码问题中解决此问题 代码强制
- C 代码问题?编译器问题?代码块
- C - 如果语句问题.代码将不会运行其他,否则
- 简单的NOOB C 输入/输出问题:代码错误
- NDK:0xdeadd00d时虚拟机中止和致命信号 11 (SIGSEGV) 的问题(代码 = 1)
- 编译问题 - 代码 C2129
- c++问题代码段
- 模板作用域问题代码无法编译
- 基本 CUDA 程序的问题.代码或编译器