将字符串转换为char

时间:2016-11-07 18:55:56

标签: c++ char switch-statement

我在使用C ++转换类型时遇到了问题。我有一个表达式:string wholeExpression = "44*2";我希望将数字与运算符分开。 如果它是一个运算符,我使用这部分代码:

    string subExpression;
    char skladnik;

subExpression = wholeExpression.substr(poczatek, lenght);
            skladnik = subExpression[0];

如果是数字:

subExpression = wholeExpression.substr(poczatek, lenght);
            skladnik = atoi(subExpression.c_str());

@EDIT

switch (skladnik)
        {


        case '+':
        case '-':
        {

            while (topOfStack > 0 && stack[topOfStack - 1] != '(')
            {
                outPut += stack[topOfStack - 1] + przecinek;
                stack.resize(topOfStack - 1);
                topOfStack--;
            }
            stack += skladnik;
            topOfStack++;
            break;
        }

        case '/':
        case '*':
        {
            while (topOfStack > 0 && (stack[topOfStack - 1] == '*' || stack[topOfStack - 1] == '/'))
            {
                outPut += stack[topOfStack - 1] + przecinek;
                stack.resize(topOfStack - 1);
                topOfStack--;
            }
            stack += skladnik;
            topOfStack++;
            break;
        }

        case '(':
        {
            stack += skladnik;
            topOfStack++;
            break;
        }
        case ')':
        {
            while (stack[topOfStack - 1] != '(')
            {
                outPut += stack[topOfStack - 1] + przecinek;
                stack.resize(topOfStack - 1);
                topOfStack--;
            }
            if (stack[topOfStack - 1] == '(')
            {
                stack.resize(topOfStack - 1);
                topOfStack--;
            }
            break;
        }

        default:
        {
            outPut += to_string(skladnik) + przecinek;
            break;
        }
        }


    }

但突然间我遇到了40到43以及45和47的数字问题 - >哪些是运算符(ASCII码)。它们可能被开关解释为数字而不是oparators。另一个数字完美无缺。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您已回答了自己的问题。数字40的char不存在。它有两个char变量:4和0.因为您将int放入带有atoi的char,它将使用ASCII码。在不知道lenght的价值的情况下,很难说这确实是您的问题,但这里有两种可能的解决方案:

  1. 不要提前使用atoi。而是在switch语句之后将每个数字char解释为实际的整数(4和0将是 atoi('4') * 10 + atoi('0')
  2. 使用intlongdouble变量来保存您的号码。

答案 1 :(得分:0)

您正在以两种不同的方式使用变量skladnik。在一个代码路径中,它指的是解码的整数,在第二个代码路径中它指的是一个字符。一旦你将这样的含义混为一谈,一旦你处于switch的含义,就没有办法告诉它。

您应该使用两个不同的变量,一个用于解码数字,另一个用于操作员字符。然后会有没有混淆。