我需要创建一个具有单个随机大写字母的NSString。如何用一个随机字母创建一个NSString?
我可以得到随机INT的罚款,我可以从它构建一个C字符串,然后做的NSString,但我想,必须有一个更好,更可可十岁上下的方式。
谢谢!
我需要创建一个具有单个随机大写字母的NSString。如何用一个随机字母创建一个NSString?
我可以得到随机INT的罚款,我可以从它构建一个C字符串,然后做的NSString,但我想,必须有一个更好,更可可十岁上下的方式。
谢谢!
你可以只让包含您认为什么是字母和撤出它的随机字符一个NSString。下面是一个例子类别:
@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end
(你需要srandom(time())
在某些时候,明明也许在您的类的初始化方法。)
我认为最好的方法是使用AC字符串,以便您可以使用明确的编码。下面是一个例子:
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这样的东西上,那么你需要小心这种技术。用户认为单个角色可能不是一个单一的角色。 – 2009-06-24 00:18:55
有一个角色的想法是模糊的。我已经改变了它,以便明确使用Cocoa对组合字符序列的支持。 – Chuck 2009-06-24 00:40:04