在查找字符频率的过程中,由于改变阵列的大小而引起的问题


#include <iostream>
using namespace std;
int main()
{
string s;
int hash[256];
getline(cin, s);
int max = 0;
char ch;
for (int i = 0; i < s.size(); i++)
{
hash[s[i]]++;
if (hash[s[i]] > max)
{
max = hash[s[i]];
ch = s[i];
}
else if (hash[s[i]] == max && ch > s[i])
{
ch = s[i];
}
}
cout << ch << " " << max;
return 0;
}

上面的代码用于从给定字符串中查找字符的最大频率。问题是,当我将数组初始化为零(int hash[256] = {0}((256,因为这是可能的最大字符数(时,代码运行良好,但如果我不这样做,程序不会输出正确的答案,此外,如果我将其更改为(int hash[3000];(,代码也运行良好。我不明白当我改变尺寸时会出现什么问题。

首先:C++中的数组不会初始化,并且可以包含任意数据。使用未初始化的值将导致未定义的行为。

为什么改变数组的大小会改变什么?

当您调用未定义的行为时,任何都可能发生。从技术上讲,删除所有文件将是一种";正确的";实施

在这种情况下,我想编译器会将较大的数组存储在另一个地方,而这个地方恰好包含零。

编辑

初始化有一个例外:全局数组(和变量(在程序开始时总是用零初始化。

最新更新