如何用一个随机字母创建一个NSString?

时间:2009-06-23 23:24:13

标签: cocoa nsstring

我需要创建一个具有单个随机大写字母的NSString。

我可以得到随机int的好,我可以从中构造一个C字符串,然后创建NSString,但我想必须有一个更好的,更可靠的方式。

谢谢!

2 个答案:

答案 0 :(得分:6)

你可以创建一个包含你认为是字母的NSString并从中提取一个随机字符。这是一个示例类别:

@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
    return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end

(显然,您需要srandom(time())。或许在您的类别中包含初始化方法。)

答案 1 :(得分:4)

我认为最好的方法是使用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];
}

我更喜欢第一种方法中明确的字符编码,但它们都是正确的。