gpt4 book ai didi

c++ - 字符串数据似乎在 for 循环后被删除

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:34 25 4
gpt4 key购买 nike

在下面的代码中,每当我进入调试器时,段落的值都会被删除,或者返回到 0,我似乎无法弄清楚为什么,想法?

void getFreqLetter(string paragraph){
char alphabet[26] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
int counter[26];
//set counter values to zero
for (int clear = 0; clear < sizeof(counter) - 1; ++clear){
counter[clear] = 0;
}
cout << paragraph;
int result = 0;
for (int i = 0; i < sizeof(paragraph); ++i){
//case:found
for (int j = 0; j < sizeof(alphabet) - 1; ++j){
if (alphabet[j] == paragraph[i]){
counter[j]++;
}
}
//go through array find largest value
for (int k = 0; k < sizeof(counter) - 1; ++k){
if (counter[k] > result){ result = counter[k]; }
}
cout << result;
}
}

最佳答案

综上所述,所有的问题都是因为你误用了sizeof

sizeof(paragraph) 并没有像您想象的那样做:它返回的是 string 类的大小,而不是 string 实例中的字符数。

假设它是 std::string 类型,您应该使用 paragraph.size()

sizeof(alphabet) 通过一个幸运的巧合返回数组中元素的数量:sizeof(char) 由标准定义是 1. 这样的“王牌”代码应该附加注释!

sizeof(counter) 就没那么幸运了。您返回的值是 sizeof(int) 的倍数,它因平台而异(2、4 和 8 很常见)。您应该编写 sizeof(counter)/sizeof(int)sizeof(counter)/sizeof(counter[0])。有些人更喜欢后者,因为您不需要对类型进行硬编码,而且 C++ 标准不允许使用零长度数组,counter[0] 定义明确。

(这里要记住的是 sizeof 在编译时计算)。

关于c++ - 字符串数据似乎在 for 循环后被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760043/

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