c++ 布尔条件检查给出警告

nle07wnf  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在解决一个问题https://leetcode.com/problems/word-break/。我的代码看起来像下面这样:

bool existsInDict(string s, vector<string>& wordDict)
{
    if(std::find(wordDict.begin(),wordDict.end(),s) != wordDict.end())
    {
        return true;
    }
    return false;
}

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        int str_size = s.length();
        if(str_size == 0)
        return true;

        bool *dict = new bool[str_size+1];
        std::fill(dict, dict+str_size,false);

        for(int i =1;i<=str_size;++i)
        {
            if(dict[i]==false && existsInDict(s.substr(0,i),wordDict))
            {
                dict[i] = true;
            }
            if(dict[i]==true)
            {
                if(i==str_size)
                return true;
                for(int j=i+1;j<=str_size;++j)
                {
                    if((dict[j]==false) && existsInDict(s.substr(i+1,j-i),wordDict))
                    {
                        dict[j] = true;
                    }
                    if((dict[j]==true) && (j == str_size))
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
};

字符串
这给了我一个错误Line 40: Char 25: runtime error: load of value 190, which is not a valid value for type 'bool' (solution.cpp) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:49:25
我不知道这里出了什么问题,因为我在if循环中对该行的检查都有bool结果。有人能帮我理解吗?
谢啦,谢啦

k5ifujac

k5ifujac1#

你正在检查dict[j]是否是true,如果j等于str_size,然而,当j等于str_size时,问题就出现了,所以我认为你必须将循环条件修改为j < str_size而不是j <= str_size,因为它确保了j保持在dict数组的边界内!
所以像下面这样修复它:

if ((dict[j] == true) && (j == str_size - 1))

字符串

相关问题