从字符串解析代数函数或表达式

时间:2019-03-06 23:32:48

标签: c++ string parsing c++17

比方说,我将有一个std::string形式的代数函数或表达式。函数或类构造函数都可以将此字符串作为参数。

void function( const std::string& function ) { /* ... */ }

class Foo {
    explicit Foo( const std::string& function ) { /* ... */ }
};

然后假设我有一个函数将解析此字符串,然后将其转换为std::function,其中我当前的函数签名如下:

template<typename Ret, typename... Args>
void parseStringFunc( const std::string& funcStr, std::function<Ret(Args...)>& func ) {
     /*....*/
 }

现在想到了这个问题,因为它与解析字符串有关。我有两种选择,我想知道哪一种是查找表的首选。

  • 我可以有一个std::vector<char> operators { '+', '-', '*', '/', '=' }
    • 与上面相同,但用于数字或数字[0-9]
    • 以及字母[a-z]和[A-Z]可能很乏味。
  • 或者我可以简化一下,只使用std::string
    • std::string operators { "+-*/=" };
    • std::string numbers{ "0123456789" };
    • std::string letters{ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" };

我想知道哪种方法是上面查找表比较funcStr中各个字符的首选,这些字符将被解析为std::function

0 个答案:

没有答案