std::out_of_range 比较字符串中的符号时出错
std::out_of_range error when comparing symbols in strings
我正在学习 C++,在此作业中,我将学习有关 C++ 的各种错误。我发现并修复了这段代码中的两个先前错误,但第三个错误发生在程序的 运行 阶段抛出 "std::out_of_range" 并关闭。
程序不是我写的,基本是猜字谜
猜对最后一个字母时会发生异常。
Link 整个代码是 https://onlinegdb.com/Hk-84-WSz ,但据我所知,相关内容发生在第 100 行和第 106 行。
整个错误信息:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 1) >= this->size() (which is 1)
Aborted
这里是导致异常的函数:
bool onko_sana_jo_arvattu(std::string sala, std::string arvatut)
{
for (std::string::size_type indeksi = 0; indeksi <= sala.size(); ++indeksi)
{
// The next line seems to be causing the exception when the last letter has been guessed
if (arvatut.find(sala.at(indeksi)) == std::string::npos)
{
return false;
}
}
std::cout << "stuff" << std::endl;
return true;
}
indeksi <= sala.size()
必须是:
indeksi < sala.size()
因为 std::string
的索引是从 0
到 size - 1
。
for (std::string::size_type indeksi = 0; indeksi <= sala.size(); ++indeksi)
改为
for (std::string::size_type indeksi = 0; indeksi < sala.size(); ++indeksi)
从 Discord ("Programming Discussion") 找到的解决方案
我正在学习 C++,在此作业中,我将学习有关 C++ 的各种错误。我发现并修复了这段代码中的两个先前错误,但第三个错误发生在程序的 运行 阶段抛出 "std::out_of_range" 并关闭。
程序不是我写的,基本是猜字谜
猜对最后一个字母时会发生异常。
Link 整个代码是 https://onlinegdb.com/Hk-84-WSz ,但据我所知,相关内容发生在第 100 行和第 106 行。
整个错误信息:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 1) >= this->size() (which is 1)
Aborted
这里是导致异常的函数:
bool onko_sana_jo_arvattu(std::string sala, std::string arvatut)
{
for (std::string::size_type indeksi = 0; indeksi <= sala.size(); ++indeksi)
{
// The next line seems to be causing the exception when the last letter has been guessed
if (arvatut.find(sala.at(indeksi)) == std::string::npos)
{
return false;
}
}
std::cout << "stuff" << std::endl;
return true;
}
indeksi <= sala.size()
必须是:
indeksi < sala.size()
因为 std::string
的索引是从 0
到 size - 1
。
for (std::string::size_type indeksi = 0; indeksi <= sala.size(); ++indeksi)
改为
for (std::string::size_type indeksi = 0; indeksi < sala.size(); ++indeksi)
从 Discord ("Programming Discussion") 找到的解决方案