1
int strStr(string haystack, string needle) {
int i, j;
for(i = 0; i <= haystack.length() - needle.length(); i++){
for(j = 0; j < needle.length(); j++){
if(haystack[i+j] != needle[j]){
break;
}
}
if(j == needle.length()){
return i;
}
}
return -1;
}
這是我爲實現strStr函數而編寫的代碼。我發現很奇怪,當haystack =「」和needle =「a」時,它返回的結果是32而不是-1。獲取C++中字符串的長度
然而,當我修改第三行到
int k = haystack.length() - needle.length();
for(i = 0; i <= k; i++){
它返回正確的輸出-1。現在我真的很困惑。爲什麼我最初寫的代碼是錯誤的?他們之間有什麼區別?
的['length'](http://en.cppreference.com/w/cpp/string/basic_string/size)函數返回一個'size_type',它是一個***無符號***類型。無符號'0'減去無符號'1'會給你一個非常大的數字。當你分配給一個* signed *整型變量時,這個大數變成了別的東西。 –
至於如何我會建議你解決這個問題:添加一個檢查,確保'haystack.length()> = needle.length()'。或者,你知道,使用[std :: string :: find'函數](http://en.cppreference.com/w/cpp/string/basic_string/find)。 –