Pertanyaan Jumlah kejadian substring dalam string [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Apakah ini cara yang dapat diterima untuk menemukan jumlah kejadian substring? Mungkinkah dibuat lebih efisien? Dan pengkodean apa yang harus digunakan untuk beralih dari NSString ke string c?

Saya tidak yakin 100% tentang ()!=NULL dalam pernyataan sementara, tampaknya berfungsi dengan baik dan ketika tidak ada lagi kejadian yang ditemukan, itu memecahkan loop sementara.

- (NSUInteger)occurenceOfString:(NSString *)substring {
    const char *substr = [substring cStringUsingEncoding:NSUTF8StringEncoding];
    const char *selfstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    unsigned long substrlen = strlen(substr);
    NSUInteger count = 0;
    char * ptr;
    while ((ptr = strstr(selfstr, substr)) != NULL && substr != '\0') {
        count++;
        substr += substrlen + *ptr;
    }
    return count;
}

(Ini adalah metode kategori, sehingga string sedang dicari sendiri).


4
2017-10-16 17:07


asal


Jawaban:


NSUInteger cnt = 0, length = [str length];
NSRange range = NSMakeRange(0, length); 
while(range.location != NSNotFound)
{
  range = [str rangeOfString: @"substr" options:0 range:range];
  if(range.location != NSNotFound)
  {
    range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
    cnt++; 
  }
}

7
2017-10-16 17:36