2016-03-19 24 views
1

Neden bunu kullanamıyorum?Döngü içi durumun son durumu hakkında

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

Haystack = "abb" needle = "abaaa" olduğunda hata yaşıyorum.

int strStr(string haystack, string needle){ 
     if(needle.length()==0) 
      return 0; 
     if(haystack.length()==0)// || haystack.length() < needle.length()) 
      return -1; 

     int diff=haystack.length()-needle.length()+1; 
     for(int i=0; i<(haystack.length()-needle.length()+1); i++){ 
     //for(int i=0; i<diff; i++){ 
//   printf("%d %d\n",haystack.length(),needle.length()); 
     for(int j=0; j<needle.length(); j++){ 
      if(haystack.at(i+j)!=needle.at(j)) 
      break; 

      if(j==needle.length()-1) 
      return i; 
     } 
     } 

     return -1; 
    } 
+2

'std :: string.length()', imzasız olan 'size_t' türünde bir değer döndürür. Substraction daha sonra imzasız bir tamsayı taşmasıyla sonuçlanır. – IGarFieldI

+0

@IGarFieldl Anladım. Teşekkürler! – dykw

cevap

3

sorunlarla görüyoruz nedeniyle imzasız length() değerlere aritmetik başvurduğunuz yolu:

int diff=haystack.length()-needle.length()+1; 
for(int i=0; i<diff; i++) 

Bu fonksiyon: Ben kullanırsanız

Hiçbir hata var. Değişim:

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

için:

Bu orijinal örnekte negatif boşalmasının önlenmesi pozitif karşılaştırma, sol ve sağ tarafını hem tutar
for(size_t i=0; i+needle.length()<=haystack.length(); i++) 

.

+1

Anladım. Teşekkürler! – dykw

İlgili konular