【发布时间】:2009-06-23 23:24:12
【问题描述】:
我需要创建一个具有单个随机大写字母的 NSString。
我可以得到随机整数,我可以从中构造一个 C 字符串,然后生成 NSString,但我想必须有更好、更可可的方式。
谢谢!
【问题讨论】:
我需要创建一个具有单个随机大写字母的 NSString。
我可以得到随机整数,我可以从中构造一个 C 字符串,然后生成 NSString,但我想必须有更好、更可可的方式。
谢谢!
【问题讨论】:
您可以只创建一个包含您认为是字母的 NSString 并从中提取一个随机字符。这是一个示例类别:
@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end
(很明显,您有时需要srandom(time())。也许在您的类别中包含一个初始化方法。)
【讨论】:
我认为最好的方法是使用 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];
}
我更喜欢第一种方法中的显式字符编码,但它们都是正确的。
【讨论】: