gpt4 book ai didi

c++ - 为什么我在一个字符串和一个 vector 上得到两个不同的结果

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:43 26 4
gpt4 key购买 nike

我有两个字符串 s1:"abcd" 和 s2:"ab" 以及两个 int vector v1:12,13,14,15 和 v2:12,13。我正在计算两个字符串和两个 vector 之间的距离。我从网上获得了一个 c 文件的代码,用于计算两个字符串之间的距离。我正在修改代码以计算两个 vector 之间的距离,但在 c++ 中。代码有效,但结果不一样(两次计算的距离应该相同)。问题来自:

double transpositions = 0.0;    
for (i = 0; i < s1_len; i++) {
if (!s1_matches[i]) continue;
while (!s2_matches[k]) k++;
if (s1[i] == s2[k]) transpositions++;
k++;
}

s1_lens1_len(s1)(s2 相同),s1_matchint *s1_matches = (int *) calloc(s1_len, sizeof(int))。我正在运行带有正确答案的 c 代码,但是当我将代码更改为 c++ 并将字符串变量更改为 vector 变量时,我为 获得的数字换位是不同的。要将字符串更改为 vector ,我通过 v1.size() 获取 vector 的大小 (v1_len) 并通过 获取v1_match >int *v1_matches = (int*) calloc(v1_len, sizeof(int))。代码完全一样:

double transpositions = 0.0;    
for (i = 0; i < v1_len; i++) {
if (!v1_matches[i]) continue;
while (!v2_matches[k]) k++;
if (v1[i] == v2[k]) transpositions++;
k++;
}

这里有什么问题?

最佳答案

您似乎没有对 s2_matchesv2_matches 进行任何边界检查。当 s1s2 不相同时,这将有未定义的行为:

while (!s2_matches[k]) k++;
if (s1[i] == s2[k]) transpositions++;
k++;

ie 您永远不会检查 k 是否溢出 s2s2_matches 的边界。与 vector 版本相同。

关于c++ - 为什么我在一个字符串和一个 vector 上得到两个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com