我在C ++中制作数学表达式解析器并遇到了问题。当我使用某些运算符调用程序时(例如math 2^4
)Windows会将插入符号解析为特殊字符,并且程序不会读取它。我可以使用反斜杠来逃避它,但我似乎无法逃避正斜杠。
如果我运行math "1(4 / 2)"
,程序只会读取4
。但是,如果我运行math "1(4 \/ 2)"
,它会读取整个表达式。
我的问题:我可以在Windows或编译器中禁用此解析吗? (我读到解析实际上是由程序处理的)。我正在使用G ++ 4.8.1。如果需要,我可以发布代码。
编辑:添加了更多示例
如果它看到一个不能用于数学的字符,就像反斜杠一样,它会吐出一个错误。测试时我没有遇到这个错误。
致电:math "1(2 + 3 - 4 / 5 * 6 % 7 ^ 8 % 9 | 10 ? 11)"
结果:NUMBER_1 OPEN_BRACE NUMBER_2 NUMBER_3 NUMBER_5 NUMBER_9
致电:math "1(2 + 3 - 4 \/ 5 \* 6 \% 7 ^ 8 & 9 \| 10 ? 11)"
结果:NUMBER_1 OPEN_BRACE NUMBER_2 NUMBER_3 DIV NUMBER_5 BAND NUMBER_9
答案 0 :(得分:0)
^
是cmd.exe
命令解释器中的转义字符。
C:\> echo 2^5 25 C:\> echo 2^^5 2^5 C:\> echo "2^5" "2^5" C:\> _
与C和C ++转义字符\
一样,行末尾的插入符号表示行继续:
C:\> echo 2^ More? ^5 2^5 C:\> _
命令解释程序的行为不是Windows的固有功能。它甚至不是常见的Windows约定。事实上,它在Powershell中并不存在:
C:\> powershell Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved. PS C:\> echo 2^5 2^5 PS C:\> _
正如这样确定的那样,你看到的效果与C ++ 甚至Windows无关,但只是特定命令解释器的特性,即{{1} }。