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を返します。今私は本当に混乱しています。元々書いたコードが間違っているのはなぜですか?それらの違いは何ですか?
を示していることに注意してください/ string/basic_string/size)関数は、*** unsigned ***型の 'size_type'を返します。符号なし '0' - 符号なし' 1'はあなたに非常に大きな数字を与えます。 * signed *整数変数に代入すると、その大きな数が別のものになります。 –
問題を解決することをお勧めします: 'haystack.length()> = needle.length()'を保証するチェックを追加してください。あるいは、あなたが知っている、[std :: string :: find'関数(http://en.cppreference.com/w/cpp/string/basic_string/find)を使ってください。 –