私の質問は、C++ で文字列を分割するにはどうすればよいですか? たとえば、私は `
string str = "[ (a*b) + {(c-d)/f} ]"
- [,(,a,*,b,...... のように式全体を個別に取得する必要があります。
- そして、適切な位置に[,(,),{,(,),},] のようなブラケットのみを取得したい
いくつかの簡単な方法でこれらを行うにはどうすればよいですか
私の質問は、C++ で文字列を分割するにはどうすればよいですか? たとえば、私は `
string str = "[ (a*b) + {(c-d)/f} ]"
いくつかの簡単な方法でこれらを行うにはどうすればよいですか
これは字句解析(一連の文字列または文字列からトークンを取得すること) と呼ばれ、その後に解析を行う必要があります。たとえば、ドラゴンブックの前半を読んでください。
たぶん、 LL解析で十分です....
そのためのツールはたくさんあります。この質問を参照してください(ANTLRをお勧めします)。おそらく、ある時点で抽象構文ツリーを構築する必要があります。
しかし、それは努力する価値がないかもしれません。アプリケーションにスクリプト言語を埋め込むことを検討しましたか? lua (これとこれを参照...)、またはgnu guile、pythonなど...
これが私がこれをしなければならない方法です、
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,},],