1

私のC++割り当ての1つでは、次のような文を解析する必要があります。

SET a = 10
SET b = a
印刷b

これらのステートメントを解析するために、次のコードを使用しました。

vector<string> stringSplitter(istringstream& tmp) {
vector<string> tokens;  
string str;
while(tmp.good()) {
    tmp >> str;
    tokens.push_back(str);              
}
return tokens;
}

エラーチェックのために、SETコマンドには4つのトークンしかなく、PRINTステートメントには2つのトークンしかないことを確認したいと思います。したがって、SETコマンドとPRINTコマンドをチェックするときに私が持っている対応する条件は次のとおりです。

if (tokens.size() != 4) {
cerr << "Error in Line "<< lineNumber <<":Invalid format\n";
return -1;
}

if (tokens.size() != 2) {
cerr << "Error in Line "<< lineNumber <<":Invalid format\n";
return -1;
}

私が抱えている問題は、「SET a =10」と「PRINTa」で機能することですが、「SET a=10」と「PRINTa」のように文の最後に空白があると機能しません。 a "

誰かがこれを手伝うことができますか?

4

2 に答える 2

4

使用する

while ( tmp >> str )

tmp.good()何かが残っているかどうかだけを言います。あなたはそれから別の文字列を取得することがうまくいったかどうか知りたいです。

于 2013-03-01T16:37:25.867 に答える
0

演算子はトークン化にスペースを使用するため、>>スペースが省略されていると、必要なものが得られません=

代わりに、より高度な関数を使用して分割してください。

于 2013-03-01T16:25:08.723 に答える