在整型数组的最后一个元素中存储数据的问题
C++: trouble storing data in last element of int array
下面的代码读取文件,然后计算'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]
。
相关文章:
- 使用 char* 存储数据和产生的错误
- 我可以存储数据的地方/C++,Linux,QtCreator
- 如何在共享库的整个生命周期内存储数据
- 在字符串数组中动态创建和存储数据
- 用指向文件的指针存储数据结构
- 如何存储数据/我们如何获取存储在 unordered_map c++11 中存储桶中的数据
- 存储数据的对象和存储指向数据的智能指针的对象
- C++读取文本文件并存储数据
- Cocos2dx: 无法存储数据?
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 尝试从每个预期数据之间有多个空间的文件中读取和存储数据
- 存储数据列表并自动分配给结构的最佳方法是什么
- QT MAC应用程序存储数据路径
- 动态分配存储数据在堆中的随机位置中
- 鸟类调查中的项目在代码中遇到问题.如何像数据库系统一样存储数据
- 可以在C 中永久存储数据中的数据
- 用于存储数据的结构和外部二进制文件
- 使用 char 数组存储数据
- 在结构中读取和存储数据
- 尝试在结构中存储数据时出现堆分配错误