在整型数组的最后一个元素中存储数据的问题

C++: trouble storing data in last element of int array

本文关键字:存储 数据 问题 最后一个 整型 数组 元素      更新时间:2023-10-16

下面的代码读取文件,然后计算'a', 'b'等的数量…字符,它将'A'和'A'视为同一个字母。

下面的代码可以工作;但是,如果我将int数组count[26] ={0}的声明更改为count[25] ={0}(并且只更改此声明),程序将无法正确存储存储在数组第25个元素中的'z'字符的数量。它会在第25个元素中存储-1。我不明白为什么?我从不访问count[26],只访问count[0]到count[25],但是为什么我必须在数组中添加一个元素才能使代码工作呢?当count为26个元素长时,正确的'z'字符数存储在count[25]中。

int main (int argc, char *argv[], char **env)
{
// Declare variables
int c, big ;
int count[26] = {0} ;
int bar[25] = {0} ;
ifstream infile("histo.data") ;
while (!infile.eof())
{
        c = infile.get() ;
        c = tolower(c) ;
      if ( c >= 97 && c <= 122)
      {
         count[c - 'a']++ ;
      }
}
infile.close() ;
for (int i = 0; i <= 25; i++)
{
    printf("%c: %dn",(97+i),count[i]) ;
}

// find largest letter count
big = count[0] ;
for (int i = 1; i <= 25; i++)
{
    if(count[i] > big)
    {
      big = count[i] ;
    }
}
// bar lengths
int cols  = atoi(getenv("COLUMNS")) ;
for (int i = 0; i <= 25; i++)
    {
        bar[i] = (cols-3)*count[i]/big ;
    }
// print bars
for (int i = 0; i <= 25; i++)
{
    printf("n%c: ",(97+i));
    for (int j = 1; j <= bar[i]; j++)
    {
        cout << "=" ;
    }
}
cout << "n" << endl ;
}

数组是零索引的,但是您声明它们的数字是数组的大小。因此,如果需要26个元素,则需要声明一个包含26个元素的数组。索引范围为0…25尽管。

count[25]声明了一个大小为25的数组,而不是最后一个索引为25的数组。由于数组是零索引的,因此数组中的最后一个合法索引比长度小1。有26个字母,所以你需要一个长度为26的数组,声明为count[26]