Cocoa 如何创建带有一个随机字母的NSString?
我需要创建一个包含单个随机大写字母的NSString 我可以得到random int,我可以用它构造一个C字符串,然后生成NSString,但我想一定有更好的方法Cocoa 如何创建带有一个随机字母的NSString?,cocoa,nsstring,Cocoa,Nsstring,我需要创建一个包含单个随机大写字母的NSString 我可以得到random int,我可以用它构造一个C字符串,然后生成NSString,但我想一定有更好的方法 谢谢 >你可以只做一个包含你认为是字母的NSnpe并从中拉随机字符。下面是一个示例类别: @implementation NSString(RandomLetter) - (NSString *)randomLetter { return [self substringWithRange:[self rangeOfCompos
谢谢 >你可以只做一个包含你认为是字母的NSnpe并从中拉随机字符。下面是一个示例类别:
@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end
(显然,在某个时候你需要
srandom(time())
。可能在你的类别中包含一个initialize方法。)我认为最好的方法是使用c字符串,这样你就可以使用显式编码。下面是一个例子:
NSInteger MyRandomIntegerBetween(NSInteger min, NSInteger max) {
return (random() % (max - min + 1)) + min;
}
NSString *MyStringWithRandomUppercaseLetter(void) {
char string[2] = {0, 0};
string[0] = MyRandomIntegerBetween(65, 90); /// 'A' -> 'Z' in ASCII.
return [[[NSString alloc] initWithCString:string encoding:NSASCIIStringEncoding] autorelease];
}
这里有一个替代方案,实际上几乎是一样的,但是避免使用C字符串
NSString *MyStringWithRandomUppercaseLetter(void) {
unichar letter = MyRandomIntegerBetween(65, 90);
return [[[NSString alloc] initWithCharacters:&letter length:1] autorelease];
}
我更喜欢第一种方法中的显式字符编码,但它们都是正确的。对于A-Z,这种方法将非常有效。如果你不想把你的领域限制在像A-Z这样的东西上,你需要小心使用这种技术。用户所认为的单个字符可能不是一个单一的unichar。在某种程度上,字符的概念是模棱两可的。我对其进行了更改,使其明确使用Cocoa对合成字符序列的支持。谢谢!这就是我所用的。这根本不能处理字符序列,所以我不知道你为什么觉得这是优越的。哦,我同意Chuck。不同之处在于,此代码显式限制为'A'->'Z'。对于另一种方法,调用方需要提前意识到该问题。在这里,这个函数的调用者不可能在处理需要多个代码点的“字符”时出错。