如何拆分C ++字符串以单独获取整个字符串以及它的某些部分/字符

时间:2013-09-15 08:32:26

标签: c++ cstring string-split visual-c++-2012

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

string str = "[ (a*b) + {(c-d)/f} ]"
  1. 需要单独获得整个表达,如 [,(,a,*,b,......
  2. 我想在其正确的位置上仅使用 [,(,),{,(,),},括号
  3. 如何以一些简单的方式完成这些

2 个答案:

答案 0 :(得分:3)

这称为lexical analysis(从某些序列或字符流中获取令牌),后跟parsing。阅读例如Dragon Book的前半部分。

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

有很多工具,请参阅this question(我建议使用ANTLR)。你可能应该在某个时候构建一些abstract syntax tree

但这可能不值得。您是否考虑在应用中嵌入一些scripting language,例如lua(请参阅thisthis ...),或gnu guilepython等......

答案 1 :(得分: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,},],