为什么char没有转换为int?

时间:2017-12-28 16:23:15

标签: c++

请告诉我为什么这个c ++代码不起作用,当我输入2 + 4这样的等式时,我得到输出...为什么会发生这种情况?:

#include <iostream>

using namespace std;

int main()
{
    string input;
    int length;
    int p1;
    int i1;
    int i2;
    string result;

    cout << "Enter your expression" << endl;
    cin >> input;
    length = input.size();

    char data[length];
    input.copy( data, length );

    switch (data[1]){
        case '+' : 
            p1 = length - 2;
            i1 = data[0];
            i2 = data[p1];
            result = i1 + i2;

            cout << result << endl;
            break;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

这里有三件让你困惑的事情。

首先是表达式:

i1 = data[0];
i2 = data[p1];

指定data[0]data[p1]的字符值 如果输入为2+4,您实际上正在分配&#39; 2&#39;的字符值。和&#39; +&#39;。在ASCII&#34; 2&#34;由代码点50和&#34; +&#34;表示。到了43。

那么表达式i1+i2实际上等于93。

令你感到困惑的是,s=i1+i2实际上绑定了重载basic_string& operator=( CharT ch );,因此将93转换回字符并将单个字符串分配给s,其恰好是] 1}}如你所见!

这是修复了这三个故障的代码:

#include <iostream>

using namespace std;

int main()
{
    string input;
    int length;
    int p1;
    int i1;
    int i2;
    string result;

    cout << "Enter your expression" << endl;
    cin >> input;
    length = input.size();

    char data[length];
    input.copy( data, length );

    switch(data[1]){
    case '+' : p1 = length - 1; //Not -2 as was.
    i1 = data[0]-'0';//Works for ASCII compatible and so all modern systems...
    i2 = data[p1]-'0';
    result = std::to_string(i1 + i2);//Force the creation of a decimal string of the result.
    cout << result << endl;
    break;
    }
    return 0;
}