我正在尝试编写strchr的等价物,但是使用NSStrings ......我现在有了这个:
Boolean nsstrchr(NSString* s, char c)
{
NSString *tmps = [NSString stringWithFormat: @"%c", c];
NSCharacterSet *cSet = [NSCharacterSet characterSetWithCharactersInString: tmps];
NSRange rg = [s rangeOfCharacterFromSet: cSet];
return rg.location != NSNotFound;
}
这似乎是不必要的复杂......有没有办法做到这一点(最好是一个不涉及将NSString转换为运行时间加倍的cstring,或者使用characterAtIndex自己编写的...:我是在NSString描述中缺少一些明显的方法?
答案 0 :(得分:2)
KennyTM已经注意到(在评论中)您可以使用-[NSString rangeOfString:]
代替-[NSString rangeOfCharacterFromSet]
。我并不是要偷他有用的答案,但我想指出你可以把它包装在NSString
的一个类别中,以便更容易使用:
@interface NSString (AdditionalStringOps)
- (BOOL) containsCharacter:(char) c;
@end
@implementation NSString (AdditionalStringOps)
- (BOOL) containsCharacter:(char) c
{
NSString *tmp = [NSString stringWithFormat:@"%c", c];
return [self rangeOfString:tmp].location != NSNotFound;
}
@end
然后你可以这样使用它:
if ([myString containsCharacter:'A']) {
// Do stuff...
}
答案 1 :(得分:0)
如@KennyTM所述,请使用rangeOfString:
。如果您真的需要处理char
级别的内容,可以通过char*
(或-UTF8String
)提取-cStringUsingEncoding:
,然后在那里搜索您的角色您可以使用任何其他char*
(可能使用strchr
)。
答案 2 :(得分:0)
Boolean nsstrchr(NSString* s, char c)
{
NSString *tmps = [NSString stringWithFormat: @"%c", c];
NSRange rg = [s rangeOfString: tmps];
return rg.location != NSNotFound;
}
答案 3 :(得分:0)
几种简化。
[s rangeOfString:tmps]
删除字符集。[NSCharacterSet characterSetWithRange:NSMakeRange(c, 1)]
创建字符集,因此您无需创建tmps
strchr([s UTF8String], c)
- 假设c
是一个ASCII字符,并且返回的指针不会转义该函数(指针变得悬空存在风险)。