¿Cómo crear un NSString con una letra aleatoria?
Pregunta
Necesito crear un NSString que tenga una letra mayúscula aleatoria única.
Puedo obtener int aleatoriamente bien, y podría construir una cadena C a partir de ella y luego hacer NSString, pero imagino que tiene que haber una forma mejor y más cacao.
¡Gracias!
Solución
Puede hacer un NSString que contenga lo que considera letras y extraer un carácter aleatorio. Aquí hay una categoría de ejemplo:
@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end
(Obtendrá srandom (time ())
en algún momento, obviamente. Quizás incluya un método de inicialización en su categoría).
Otros consejos
Creo que la mejor manera es usar una cadena c para que pueda usar una codificación explícita. Aquí hay un ejemplo de eso:
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];
}
Aquí hay una alternativa, que es más o menos lo mismo, pero evita la cadena C.
NSString *MyStringWithRandomUppercaseLetter(void) {
unichar letter = MyRandomIntegerBetween(65, 90);
return [[[NSString alloc] initWithCharacters:&letter length:1] autorelease];
}
Prefiero las codificaciones de caracteres explícitas en el primer enfoque, pero ambas son correctas.