Come creare un NSString con una lettera casuale?
Domanda
Devo creare un NSString che ha una singola lettera maiuscola casuale.
Posso ottenere un int casuale e posso costruire una stringa C da esso e quindi creare l'NSString, ma immagino che ci debba essere un modo migliore e più cacao.
Grazie!
Soluzione
Puoi semplicemente creare una NSString contenente quelle che consideri lettere e estrarre un carattere casuale da esso. Ecco una categoria di esempio:
@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end
(Dovrai srandom (time ())
a un certo punto, ovviamente. Forse includi un metodo di inizializzazione nella tua categoria.)
Altri suggerimenti
Penso che il modo migliore sia usare una stringa c in modo da poter usare una codifica esplicita. Ecco un esempio:
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];
}
Ecco un'alternativa, è praticamente la stessa cosa, ma evita la stringa C.
NSString *MyStringWithRandomUppercaseLetter(void) {
unichar letter = MyRandomIntegerBetween(65, 90);
return [[[NSString alloc] initWithCharacters:&letter length:1] autorelease];
}
Preferisco le codifiche di caratteri esplicite nel primo approccio, ma sono entrambe corrette.