c ++为什么这个错误“basic_string :: substr”并且打破了循环

时间:2013-03-24 16:25:59

标签: c++ function vector substr

我正在尝试获取单词的最后一个字母,以比较这些字母行是否在向量中。 所以我想首先检查最后2个,然后是最后3个和最后4个字母。一旦找到它,就应该分解并返回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

1 个答案:

答案 0 :(得分:1)

此处出现错误,您可以在其中修改word

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

如果word"ABCD"进入此函数,则第一次通过循环时评估为:

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

第二次通过你的循环评估为:

    word = std::string("CD").substr( size_t(-1), 1 );