在不迭代的情况下从字符串数组中识别特定字符串

Recognize a specific string from a string array without iteration

本文关键字:字符串 数组 识别 迭代 情况下      更新时间:2023-10-16

我正在用c++编写一个导数计算器,为了正确地执行导数操作,我需要在输入方程的字符串的不同字符索引处解析输入方程。我使用isdigit()解析出等式中的数值,然后将它们存储到一个单独的字符串数组中,但是现在我需要解析出等式中的数学符号,以确定我需要执行哪个操作。

是否有任何方法我可以修改(覆盖?)isdigit()从字符串数组中识别自定义值?我希望避免迭代,以使我的代码不那么混乱,因为我将在这个程序的其余部分使用大量循环,并且我希望我的代码易于理解。覆盖和继承在c++工作类似于继承在Java(与多个继承/接口的例外)?

请避免张贴与此问题范围无关的解决方案,IE;在c++中推导方程的不同方法,因为我在一些相当特殊的原因中使用了这种方法。

谢谢

您可以使用新的强大的c++ 11正则表达式库,它几乎可以完成您想要的任何解析。这样,您将避免迭代和代码混乱。

您可以直接使用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
}

重写和继承的工作原理与Java中的基本相同。您需要将函数定义为虚函数,并在派生类中重新定义它。

我知道"请避免张贴…",但我已经写了一个库,做函数解析和派生。

可在https://github.com/B3rn475/MathParseKit

我希望你能在那里找到一些技巧