我正在尝试获取单词的最后一个字母,以比较这些字母行是否在向量中。 所以我想首先检查最后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
答案 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 );