我写了这段代码。
#include <iostream>
using namespace std;
int main() {
int height[26],ht[10];
string str;
for(int i=65;i<91;i++){
cin>>height[i];
}
cin>>str;
unsigned int length=str.length();
for(unsigned int i=0;i<length;i++){
ht[i]=height[str[i]];
}
int max=ht[0];
for(unsigned int i=1;i<length;i++){
if(max<ht[i]){
max=ht[i];
}
}
cout<<max;
}
1.我已将每个字母的高度存储在数组高度中
2.我已将此数组复制到其他数组ht [], ht [i] = height [str [i]]; ,它为我提供了一个警告数组下标字符。
3.字母高度不大于7.
当我打印最大值(最大)时,我得到一个非常大的值(1038822517)
我该如何纠正我的代码?
答案 0 :(得分:1)
作为@qxz pointed out in the comments,您正在访问数组height
的越界区域:
int height[26];
for(int i=65;i<91;i++){
cin>>height[i];
}
在这里,您声明了一个包含26个元素的数组height
。可以从0
到25
访问这些元素,但您尝试访问从65
到90
的元素。这是未定义的行为。更改for
循环:
int height[26];
const int startCharacter = 'A'; // use character literal instead of a number. 'A' will evaluate to 65
for(int i = startCharacter; i <= 'Z'; i++){
cin>>height[i - startCharacter];
}
您无需访问元素65
,而是正确访问65 - 65 = 0
,这是height
中的第一个元素。下一个元素是66 - 65 = 1
,这是第二个元素。