gpt4 book ai didi

c++为什么这个错误 "basic_string::substr"并打破循环

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:24 25 4
gpt4 key购买 nike

我正在尝试获取单词的最后一个字母,以比较这些字母行是否在 vector 中。所以我想先检查最后 2 个,然后是最后 3 个和最后 4 个字母。一旦找到一个,它就应该分手,并返回 false。否则它应该检查剩下的所有内容,并在没有任何依据的情况下返回 true。

这是我的功能:

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); }

当第一次检查失败时,我收到此错误消息:

terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr

我不明白,为什么它不继续,一旦它在 else 部分。我希望我的描述足够好。BR

最佳答案

错误在这里,你修改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 );

关于c++为什么这个错误 "basic_string::substr"并打破循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com