2

単語の最後の文字を取得して、これらの文字の行がベクトル内にあるかどうかを比較しようとしています。だから私は最初に最後の2文字をチェックし、次に最後の3文字と最後の4文字をチェックしたいと思います。1つが見つかるとすぐに分割され、falseが返されます。それ以外の場合は、残っているすべてをチェックし、何も見つからない場合は真に戻ります。

これは私の機能です:

bool isIt(wstring word, vector <wstring> vec) {

int ct = 2;
while (ct < 5) {
    word = word.substr(word.length() - ct, word.length()-1);
    //wcout << word << endl;
    if (find(vec.begin(), vec.end(), word) != vec.end()) {
        //wcout << "false" << endl;
        ct = 5; return false;

    } else {ct++; wcout << ct << endl; continue; }
}  return true;}

関数はこれを介して呼び出されます:

if( word >3){ isIt(word, vec); }

最初のチェックが失敗すると、次のエラーメッセージが表示されます。

'std :: out_of_range'のインスタンスをスローした後に呼び出された終了what():basic_string :: substr

それが他の部分にあると、なぜそれが継続しないのか、私にはわかりません。私の説明が十分に良かったと思います。BR

4

1 に答える 1

2

バグはここにあり、ここで変更しwordます。

    word = word.substr(word.length() - ct, word.length()-1);

word"ABCD"この関数に入る場合、ループを最初に通過すると、次のように評価されます。

    word = std::string("ABCD").substr( 2, 3 );

そして、2回目のループでは、次のように評価されます。

    word = std::string("CD").substr( size_t(-1), 1 );
于 2013-03-24T16:47:21.177 に答える