objective-c - 子字符串在字符串中出现的次数

标签 objective-c c string

<分区>

这是查找子字符串出现次数的可接受方法吗?可以提高效率吗?从 NSString 到 c 字符串应该使用什么编码?

我不是 100% 确定 while 语句中的 ()!=NULL,它似乎工作正常,并且当没有发现更多事件时,它确实会中断 while循环。

- (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;
}

(这是一个分类方法,所以搜索的字符串是self)。

最佳答案

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++; 
  }
}

关于objective-c - 子字符串在字符串中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785890/

相关文章:

swift - Swift 中的 NSData 到 String

iphone - Xcode、 Objective-C 、IOS。线程 1 : Program received signal: "SIGABRT". 我做错了什么

iPhone屏幕旋转: Can I enforce 90 degree rotations?

c - 来自不兼容指针类型警告的初始化。找不到问题

c - NtQueryInformationThread 在我的代码中总是失败?

perl - 在 Perl 中如何获取字符串的长度?

ios - 以编程方式更改导航栏标题 : Add a symbol and change its color

iphone - 从 NSURLRequest 返回一个字符串

c - scanf 之后的 printf 始终显示 1(相同的意外值)

c++ - 将 std::string 转换为 char* 的争论