将字符串转换为字符
Converting string into char
我在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
的值的情况下,很难说这确实是您的问题,但这里有两个可能的解决方案:
- 不要预先使用
atoi
。相反,在switch语句(4和0)之后,将每个数字char
解释为实际的整数atoi('4') * 10 + atoi('0')
) - 使用
int
或long
或double
变量来保存您的数字。
您以两种不同的方式使用变量skladnik
。在一个代码路径中,它指的是一个已解码的整数,在第二个代码路径中,它指的是一个字符。一旦你像这样混淆了意思,就没有办法告诉你一旦你在switch
它有什么意思。
应该使用两个不同的变量,一个用于解码的数字,另一个用于操作符字符。这样就不会有的混淆了。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 字符转换功能 std::isupper() & std::islower() C++17
- 将字符 * 转换为字符串 *
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- 将单个字符转换为 std::string 前缀 \x01
- PPM 将字符转换为 int 授予负数
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 将常量字符* 转换为字符时出错