我的问题是,如何在C ++中拆分字符串?例如,我有`
string str = "[ (a*b) + {(c-d)/f} ]"
如何以一些简单的方式完成这些
答案 0 :(得分:3)
这称为lexical analysis(从某些序列或字符流中获取令牌),后跟parsing。阅读例如Dragon Book的前半部分。
也许LL parsing对你来说已经足够了....
有很多工具,请参阅this question(我建议使用ANTLR)。你可能应该在某个时候构建一些abstract syntax tree。
但这可能不值得。您是否考虑在应用中嵌入一些scripting language,例如lua(请参阅this和this ...),或gnu guile,python等......
答案 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,},],