1

私の質問は、C++ で文字列を分割するにはどうすればよいですか? たとえば、私は `

string str = "[ (a*b) + {(c-d)/f} ]"
  1. [,(,a,*,b,...... のように式全体を個別に取得する必要があります。
  2. そして、適切な位置に[,(,),{,(,),},] のようなブラケットのみを取得したい

いくつかの簡単な方法でこれらを行うにはどうすればよいですか

4

2 に答える 2

3

これは字句解析(一連の文字列または文字列からトークンを取得すること) と呼ばれ、その後に解析を行う必要があります。たとえば、ドラゴンブックの前半を読んでください。

たぶん、 LL解析で十分です....

そのためのツールはたくさんあります。この質問を参照してください(ANTLRをお勧めします)。おそらく、ある時点で抽象構文ツリーを構築する必要があります。

しかし、それは努力する価値がないかもしれません。アプリケーションにスクリプト言語を埋め込むことを検討しましたか? lua (これこれを参照...)、または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 に答える