Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C中的strchr?_Objective C_String_Nsstring - Fatal编程技术网

Objective c 目标C中的strchr?

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

我正在尝试编写与strchr等效的代码,但是使用NSString。。。我现在有这个:

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...
    }