我正在用C ++编写一个派生计算器,为了正确执行派生操作,我需要在方程的字符串中的各种字符索引处解析输入方程。 我正在使用isdigit()来解析等式中的数值,然后将它们存储到一个单独的字符串数组中,但是现在我需要从等式中解析出数学符号以确定我需要执行哪个操作。
有什么方法可以修改(覆盖?)isdigit()来识别字符串数组中的自定义值?我想避免迭代使我的代码变得不那么混乱,因为我已经在为这个程序的其余部分使用了大量的循环,我希望我的代码很容易理解。 C ++中的覆盖和继承是否与Java中的继承类似(多重继承/接口除外)?
请不要发布与此问题范围无关的解决方案,IE;在C ++中导出方程的不同方法,因为我出于某些相当具体的原因使用了这种方法。
由于
答案 0 :(得分:2)
您可以使用新的功能强大的C ++ 11 regular expressions library,它几乎可以解析您想要的任何内容。这样,您就可以避免迭代和代码混乱。
答案 1 :(得分:1)
您可以使用strchr
。 (并不是每个人都会喜欢这里的宏,但他们确实很容易将字符组合起来。)
#define OPERATOR "+-*/"
#define DIGIT "0123456789"
// Is c an operator
if (strchr(OPERATOR, c)) {
// Yes it is
}
或:
// Is c an operator or a digit?
if (strchr(OPERATOR DIGIT, c)) {
// Yup
}
答案 2 :(得分:0)
覆盖和继承的工作方式与Java中的工作方式大致相同。 您需要将函数定义为虚拟函数,并在派生类中重新定义它。
我知道"请不要发布...",但我已经编写了一个功能解析和派生的库。
可在https://github.com/B3rn475/MathParseKit
获取我希望你能在那里找到一些提示。