文字列を多項式クラスに変換するための関数を実装するために使用する、多項式の項を一致させるための正規表現があります。正確な一致が生成された正規表現デモhereを見ることができます。しかし、私がそれを実装しようとすると、私のプログラムはマッチを適切に見つけますが、スクリーンに奇妙にそれらをプリントします。この場合、私のC++の正規表現は正しくマッチしていますが、正しい値を返さないのはなぜですか?
-21323x^5+1233x4+123x^2-1232
Trying to match: -21323x^5+1233x4+123x^2-1232
-21323x^5
Trying to match: +1233x4+123x^2-1232
1233x4
Trying to match: +123x^2-1232
12xx^2
Trying to match: -1232
-1232
が12xx^2
なく123x^2
と他の印刷何らかの理由:例えば
-1234x^5+789x4+6x^2-567+123x
Trying to match: -1234x^5+789x4+6x^2-567+123x
-1234x^5
Trying to match: +789x4+6x^2-567+123x
789x4
Trying to match: +6x^2-567+123x
x^22
Trying to match: -567+123x
-567
Trying to match: +123x
23xx
この場合、x^22
代わりに6x^2
と23xx
の代わりを示します123x
。
これは私のコードです:
Poly* Poly::fromString(std::string str) {
Poly* re = new Poly;
bool returnNull = true;
std::regex r_term("((-?[0-9]*)x(\\^?([0-9]+))?|-?[0-9]+)");
std::smatch sm;
while(std::regex_search(str, sm, r_term)) {
returnNull = false;
std::cout << "Trying to match: " << str << std::endl;
str = sm.suffix().str();
std::cout << sm.str() << std::endl;
}
if(returnNull) {
delete re;
return nullptr;
} else return re;
}
'sm.str()'を出力する行の下に 'str = sm.suffix()。str();'という行を移動します。 'smatch'はマッチのコピーを保持せず、イテレータのみを元の文字列に入れます。その下から文字列を変更すると、プログラムはそれらのイテレーターを無効にし、したがって定義されていない動作を示します。 –
意味があります。どうもありがとうございました。これを回答として追加してください。 –