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 的索引是从 0size - 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") 找到的解决方案