【发布时间】:2016-11-07 18:55:55
【问题描述】:
我在 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());
@编辑
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 码中)。它们可能不是由开关解释为数字,而是作为运算符。另一个数字完美地工作。我该如何解决这个问题?
【问题讨论】:
-
你可以发布实际的
switch来代替这个吗?看到你的实现而不是你的伪代码会容易得多。 -
我以为你会说它是 tl;dr。这就是为什么我试图缩短它
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
您需要保留两个不同的变量。尝试对两个不同的事物使用相同的变量是错误的经济。
-
@Mikkey 我在你的整个程序中没有看到一个
isdigit()。这让我相信你做错了。解决此问题的直观方法是 1) 通过调用isdigit检测您是否位于数字的开头,如果是,则开始构建有效数字,直到遇到的字符不是数字。您似乎只是编写了一些“临时”代码,而没有任何真正的想法,或者至少是在纸上制定的计划。
标签: c++ char switch-statement