Как создать строку NSString с одной случайной буквой? - PullRequest
2 голосов
/ 24 июня 2009

Мне нужно создать строку NSSt, в которой есть одна случайная заглавная буква.

Я могу получить случайный тип int, и я могу построить из него строку C, а затем создать строку NSString, но я думаю, что должен быть лучший и более какао-путь.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 24 июня 2009

Вы можете просто создать строку NSString, содержащую то, что вы считаете буквами, и извлечь из нее случайный символ. Вот пример категории:

@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
    return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end

(В какой-то момент вам, очевидно, понадобится srandom(time()). Возможно, в вашу категорию следует включить метод инициализации.)

4 голосов
/ 24 июня 2009

Я думаю, что лучший способ - использовать строку 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];
}

Я предпочитаю явные кодировки символов в первом подходе, но они оба правильные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...