2017-11-11 7 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"のときに返される結果が-1ではなく32であるということは非常に奇妙であることがわかりました。C++での文字列の長さの取得

Iは

int k = haystack.length() - needle.length(); 
for(i = 0; i <= k; i++){ 

に第三のラインを修正する場合しかし、それは正しい出力を-1を返します。今私は本当に混乱しています。元々書いたコードが間違っているのはなぜですか?それらの違いは何ですか?

+2

を示していることに注意してください/ string/basic_string/size)関数は、*** unsigned ***型の '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; 

は[ `length`](http://en.cppreference.com/w/cpp

18446744073709551615 
+0

ありがとうございました!!!! –

関連する問題