Objective c 目标C中的strchr?
我正在尝试编写与strchr等效的代码,但是使用NSString。。。我现在有这个:Objective c 目标C中的strchr?,objective-c,string,nsstring,Objective C,String,Nsstring,我正在尝试编写与strchr等效的代码,但是使用NSString。。。我现在有这个: Boolean nsstrchr(NSString* s, char c) { NSString *tmps = [NSString stringWithFormat: @"%c", c]; NSCharacterSet *cSet = [NSCharacterSet characterSetWithCharactersInString: tmps]; NSRange rg = [s r
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描述中缺少了一些明显的方法吗?正如@KennyTM所提到的,使用
rangeOfString:
。如果你真的需要在char
级别处理东西,你可以可以通过-UTF8String
(或-cstringusingencode:
)拉出字符*
,然后像在任何其他字符*
(可能使用strchr
)上一样在其中搜索您的字符。一些简化
[s rangeOfString:tmps]
删除字符集[NSCharacterSet characterSetWithRange:NSMakeRange(c,1)]
创建字符集,因此您不需要创建tmps
strchr([s UTF8String],c)
-假设c
是ASCII字符,并且返回的指针不会逃逸函数(存在指针悬空的风险)-[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...
}
@OP:还要注意在Objective-C(soz,pedantics)中使用了
BOOL
而不是Boolean
。
if ([myString containsCharacter:'A']) {
// Do stuff...
}