【发布时间】:2018-09-08 17:11:40
【问题描述】:
long AnsiString::pos(const char* plainString) const {
const size_t patternLength = strlen(plainString);
if (patternLength == 0) return -1;
size_t stringLength = count;
int partialMatch[patternLength]; // int* partialMatch = new int[patternLength];
KMPBuildPartialMatchTable(plainString, partialMatch);
int currentStringCharacter = 0;
int currentPatternCharacter = 0;
while (currentStringCharacter < stringLength) {
if (currentPatternCharacter == -1) {
currentStringCharacter++;
currentPatternCharacter = 0;
}
else if (items[currentStringCharacter] == plainString[currentPatternCharacter]) {
currentStringCharacter++;
currentPatternCharacter++;
if (currentPatternCharacter == patternLength) return currentStringCharacter - currentPatternCharacter;
} else {
currentPatternCharacter = partialMatch[currentPatternCharacter];
}
}
// delete(partialMatch);
return -1;
}
我在使用 Visual c++ 实现这个 claas 方法时遇到错误。
int partialMatch[ patternLength ] ; // expression must have a constant value
(我正在使用其他语言的 VS,因此您可以找到一些差异)。
如您所见,我将 patternLength 声明为常量。在 ccode 中注释了一个解决方案,但我不想使用动态内存分配。有什么想法吗?
【问题讨论】:
-
数组大小必须是常量表达式。简而言之,constant-expression 是在编译时可评估的表达式。
-
删除了“重复项”:他们没有解决为什么
const变量在 C++ 中可能不够用的问题。 (OP 知道非常量变量不能是数组维度,这就是那些链接所涵盖的内容)。
标签: c++ arrays visual-c++ dimension