Warning-Array下标char

时间:2016-12-21 01:52:32

标签: c++ arrays string

我写了这段代码。

#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) 我该如何纠正我的代码?

1 个答案:

答案 0 :(得分:1)

作为@qxz pointed out in the comments,您正在访问数组height的越界区域:

int height[26];
for(int i=65;i<91;i++){
    cin>>height[i];
}

在这里,您声明了一个包含26个元素的数组height。可以从025访问这些元素,但您尝试访问从6590的元素。这是未定义的行为。更改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,这是第二个元素。