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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top