区分 C++ 中标记化字符串中的操作数和运算符

Differentiating between operands and operators in a tokenized string in C++

我怎样才能写出这样的代码

if(token is a operand)
    do this
if(token is a operator)
   do this

对于操作数,可以使用stoi()函数,但如何处理运算符?

此外,如何标记没有空格的字符串?

一种常见的方法是进行单字符前瞻 --

  • 如果是数字,则解析以下字符串作为操作数。
  • 如果它是您的运算符之一的前导字符,则将以下字符串解析为运算符。

有多种方法可以在不特别依赖空格的情况下对操作数和运算符进行标记。例如,对于操作数,只要它们是 digit/hex 或 .,您就可以继续读取字符,使用小型本地状态机跟踪进度(比如您是否看到 .已经)。

对于运算符,如果运算符的总数不是太多,您可以简单地读取所需数量的字符(假设它们可以从输入流中获得)并进行字符串比较。