将字符串转换为字符

Converting string into char

本文关键字:字符 转换 字符串      更新时间:2023-10-16

我在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码)。它们可能被交换机解释为操作员而不是数字。另一个数字也很完美。我怎样才能解决这个问题?

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

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

您以两种不同的方式使用变量skladnik。在一个代码路径中,它指的是一个已解码的整数,在第二个代码路径中,它指的是一个字符。一旦你像这样混淆了意思,就没有办法告诉你一旦你在switch它有什么意思。

应该使用两个不同的变量,一个用于解码的数字,另一个用于操作符字符。这样就不会有的混淆了。