単一のランダムな大文字を持つ 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];
}
私は最初のアプローチで明示的な文字エンコードを好みますが、どちらも正しいです。