1つのランダムな文字でNSStringを作成する方法は?
質問
単一のランダムな大文字を持つNSStringを作成する必要があります。
ランダムなint値を得ることができ、それからC文字列を構築し、NSStringを作成できますが、より良く、よりココア風の方法が必要だと思います。
ありがとう!
解決
文字と思われるものを含むNSStringを作成し、そこからランダムな文字を引き出すことができます。カテゴリの例を次に示します。
@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];
}
最初のアプローチでは明示的な文字エンコーディングを好みますが、どちらも正しいです。
所属していません StackOverflow