由于在查找字符频率期间更改数组大小而导致的问题
problem caused due to changing the size of array , during finding the frequency of charcters
#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++中的数组不会被初始化,可以包含任意数据。使用未初始化的值将导致未定义的行为。
为什么改变数组的大小会改变任何东西?
当您调用未定义的行为时任何事情 都可能发生。从技术上讲,删除所有文件将是“正确”的实施。
在这种情况下,我想编译器会将较大的数组存储在不同的地方,而这个地方恰好包含零。
编辑
初始化有一个例外:全局数组(和变量)在程序开始时总是初始化为零。
#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++中的数组不会被初始化,可以包含任意数据。使用未初始化的值将导致未定义的行为。
为什么改变数组的大小会改变任何东西?
当您调用未定义的行为时任何事情 都可能发生。从技术上讲,删除所有文件将是“正确”的实施。
在这种情况下,我想编译器会将较大的数组存储在不同的地方,而这个地方恰好包含零。
编辑
初始化有一个例外:全局数组(和变量)在程序开始时总是初始化为零。