1

我的问题是,如何在 C++ 中拆分字符串?例如,我有`

string str = "[ (a*b) + {(c-d)/f} ]"
  1. 它需要单独获取整个表达式,例如[,(,a,*,b,......
  2. 而且我只想将括号[,(,),{,(,),},]放在正确的位置

我怎样才能用一些简单的方法做到这些

4

2 回答 2

3

这称为词法分析(从某些字符序列或字符流中获取标记),然后应该进行解析阅读例如龙书的前半部分。

也许LL 解析对你来说已经足够了......

有很多工具,请参阅这个问题(我建议使用 ANTLR)。您可能应该在某个时候构建一些抽象语法树

但这可能不值得付出努力。您是否考虑过在您的应用程序中嵌入一些脚本语言,例如lua(参见thisthis ...),或gnu guilepython等...

于 2013-09-15T08:35:24.140 回答
1

这是我必须做到的一种方法,

string expression = "[ (a*b) + {(c-d)/f} ]" ;
string token ;

// appending an extra character that i'm sure will never occur in my expression 
// and will be used for splitting here

expression.append("~") ; 
istringstream iss(expression);
getline(iss, token, '~');

for(int i = 0 ; i < token.length() ; i++ ) {
    if(token[i] != ' ' ) {
        cout<<token[i] << ",";
    }
}

输出将是:[,(,a,*,b,),+,{,(,c,-,d,),/,f,},],

于 2013-09-15T11:21:59.543 回答