为什么我的断字程序有段错误

  • 本文关键字:段错误 错误 程序 c++
  • 更新时间 :
  • 英文 :

#include <iostream>
#include <vector>
using namespace std;
bool wordBreak(string s, vector<string>& wordDict) {
vector<bool> dp(s.size() + 1, false);
dp[0] = true;
for(int i = 1; i != s.size() + 1; i++){
for(auto& word : wordDict){
//i - word.size() >= 0 will be Segmentation fault
//but i >= word.size() not
if(i >= word.size() && 
dp[i - word.size()] && s.substr(i - word.size(), word.size()) == word){
dp[i] = true;
}
}
}
return dp[s.size()];
}
int main(){
string s = "leetcode";
vector<string> wordDict = {"leet", "code"};
if(wordBreak(s, wordDict)) cout << "true" << endl;
else cout << "false" << endl;
return 0;
}

这里有一些代码来解决leetcode 139。在workBreak中,当我使用i - word.size() >= 0将分段故障,但i >= word.size没有,为什么?请告诉我详细情况。它可能是关于string.substr()的。我认为I - word.size()>= 0等于I>= word.size.

i - word.size()为无符号整数,因为word.size()为无符号整数。因此,i - word.size() >= 0总是为真。

参见转换规则:https://en.cppreference.com/w/c/language/conversion

章节"常用算术转换":

如果无符号类型的转换等级大于或等于有符号类型的转换等级,则带符号类型的操作数隐式转换为无符号类型。

intunsigned int具有相同的转换等级,因为它们具有相同的字节数。这在"整数提升"一节中有解释。

相关内容

  • 没有找到相关文章

最新更新