数组输出不正确 - C ++

时间:2017-08-22 05:32:50

标签: c++

我正在编写一个C ++控制台应用程序,我将a转换为1b转换为2,依此类推。事实是,它输出了48和52之类的数字 - 尽管基于它的阵列只能达到26。

以下是代码:

void calculateOutput() {

    while (input[checkedNum] != alphabet[checkedAlpha]) {
        checkedAlpha++;
        if (checkedAlpha > 27) {
            checkedAlpha = 0;
        }
    }

    if (input[checkedNum] == alphabet[checkedAlpha]) {
        cout << numbers[checkedAlpha] << "-";
        checkedAlpha = 0;
        checkedNum++;
        calculateOutput();
    }
}

这是我的数字和字母数组:

char alphabet [27] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s','t','u','v','w','x','y','z',' '};

int numbers [27] = { '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','0' };

2 个答案:

答案 0 :(得分:3)

它的int数组,这意味着它将保存字符的ASCII值。

如果您仔细查看ASCII table,您会发现48,49,50,...是数字0,1,2的ascii值,...

您需要做的是扣除表格中第一个数字的值 - &gt; '0'(48)

cout << numbers[checkedAlpha] - '0' << "-";

或更好,将数字保存为数字而不是字符

 int numbers [27] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14​,15,16,17,18'​,19,20,21,22,23,24,25,26​,0 };

顺便说一下。这里有提示,让你更容易

tolower(inputAlphabet[index]) - 'a' + 1  // For 'a' output is 1 and so on :-)

答案 1 :(得分:0)

获取字母表数字(i9ndex)的算法非常简单。不需要表格,简单的减法可以解决这个问题。

int getLetterIndex(char c)
{
    // returns -1 if c is not a letter
    if ('a' <= c && c <= 'z')
        return 1 + c - 'a';
    if ('A' <= c && c <= 'Z')
        return 1 + c - 'A';
    return -1; 
}