Можно ли увеличить букву, т.е. A + 1 = B в Objective-C?

Я привык делать это на C или C++, т.е.:

myChar++;

должен увеличивать букву.

Я пытаюсь сделать то же самое в Objective-C, за исключением того, что у меня есть NSString для начала (NSString всегда состоит из одной буквы). Я попытался преобразовать NSString в char *, но этот метод устарел, и другие способы достижения этого, похоже, не работают.

Как мне преобразовать NSString в char * - или есть ли способ увеличить символ в target-c без необходимости использования char *?

Спасибо :)


person Jordan Smith    schedule 08.01.2011    source источник


Ответы (2)


// Get the first character as a UTF-16 (2-byte) character:
unichar c = [string characterAtIndex:0];
// Increment as usual:
c++;
// And to turn it into a 1-character string again:
[NSString stringWithCharacters:&c length:1];

Конечно, это предполагает, что увеличение символа Unicode имеет смысл, что подходит для символов диапазона ASCII, но, вероятно, не для других.

person Daniel Dickison    schedule 08.01.2011
comment
Спасибо, работает как шарм! Я целую вечность искал что-то вроде characterAtIndex и просто не мог этого увидеть :) - person Jordan Smith; 08.01.2011
comment
В нижней строке кода есть дополнительный With - просто на случай, если кто-то еще попытается скопировать это. - person Jordan Smith; 08.01.2011
comment
Он будет работать только в системах с прямым порядком байтов. Это означает все компьютеры Mac с процессором Intel, но не компьютеры PowerPC Mac. Для правильного кода вы можете использовать символ и использовать [string getBytes:&yourChar maxLength:1 usedLength:NULL encoding:NSUTF8StringEncoding options:NSStringEncodingConversionAllowLossy range:NSMakeRange(0,1) remainingRange:NULL]. - person Chuck; 08.01.2011
comment
@Chuck: Endianess имеет значение только для составных символов, то есть символов, состоящих из более чем одной последовательности unichar. Имеет смысл увеличивать unichar непосредственно для односимвольных символов, и в этом случае порядок байтов не имеет значения. Для других символов преобразование в UTF-8 также не сработает из-за схожих многобайтовых последовательностей, из которых состоят символы UTF-8. - person Daniel Dickison; 08.01.2011
comment
@Daniel Dickison: Вы говорите, что порядок байтов не влияет на порядок байтов в символе UTF-16? - person Chuck; 09.01.2011
comment
@Chuck: Порядок байтов в 2-байтовой последовательности UTF-16 будет иметь значение, если вы запишете эти байты в файл, а затем проанализируете его. Но unichar, возвращаемый и ожидаемый методами NSString, всегда будет иметь собственный порядок байтов. Другими словами, абстрактное числовое значение, представленное переменной unichar, является фактическим кодом UTF-16, т. е. [@"0" characterAtIndex:0] == 0x30 всегда верно. - person Daniel Dickison; 09.01.2011

Как насчет NSString

- (unichar)characterAtIndex:(NSUInteger)index;

Будет ли это работать?

person westsider    schedule 08.01.2011