2017-11-11 333 views
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。現在我真的很困惑。爲什麼我最初寫的代碼是錯誤的?他們之間有什麼區別?

+2

的['length'](http://en.cppreference.com/w/cpp/string/basic_string/size)函數返回一個'size_type',它是一個***無符號***類型。無符號'0'減去無符號'1'會給你一個非常大的數字。當你分配給一個* signed *整型變量時,這個大數變成了別的東西。 –

+0

至於如何我會建議你解決這個問題:添加一個檢查,確保'haystack.length()> = needle.length()'。或者,你知道,使用[std :: string :: find'函數](http://en.cppreference.com/w/cpp/string/basic_string/find)。 –

回答

1

用途:

int(haystack.length()) - int(needle.length()) 

注意

cout<<(size_t(0)-size_t(1))<<endl; 

顯示

18446744073709551615 
+0

非常感謝你! –