我已使用此代码以相反顺序打印英文NSString
:
NSString *str = term;
NSMutableArray *temp=[[NSMutableArray alloc] init];
for(int i=0;i<[str length];i++)
{
[temp addObject:[NSString stringWithFormat:@"%c",[str characterAtIndex:i]]];
}
temp = [NSMutableArray arrayWithArray:[[temp reverseObjectEnumerator] allObjects]];
NSString *reverseString=@"";
for(int i=0;i<[temp count];i++)
{
reverseString=[NSString stringWithFormat:@"%@%@",reverseString,[temp objectAtIndex:i]];
}
NSLog(@"%@",reverseString);
但是此代码仅适用于英文单词,因此当我尝试使用这样的阿拉伯语单词时:تجريب控制台将显示随机英文字符。
如何使用此代码打印上述单词的反转版本(以及任何其他类似的阿拉伯语(unicode)字符串)?
答案 0 :(得分:3)
在第一次调用%C
时,您需要使用%c
(大写C)而不是stringWithFormat
(小写c)格式说明符。小写的'c'格式说明符用于8位字符;大写的'C'代表unicode。
编辑:如果您想更有效地执行此操作,请将数据复制到unichar
元素数组中,反转数组,并将结果反馈到另一个NSString
。这使您可以在Length/2
步骤中反转字符串:
NSString * s = @"تجريب";
unichar *cc = (unichar*)malloc(s.length+1);
[s getCharacters:cc];
for (NSUInteger i=0 ; i < s.length/2 ; i++) {
// swap elements at i and s.length-i-1
unichar tmp = cc[i];
cc[i] = cc[s.length-i-1];
cc[s.length-i-1] = tmp;
}
s = [NSString stringWithCharacters:cc length:s.length];
free(cc);
NSLog(@"%@", s);
答案 1 :(得分:3)
你有两个for循环,这个代码非常低效。我使用substringWithRange:
而不是characterAtIndex:
,并通过向后迭代字符串将其直接附加到输出字符串:
- (NSString *) createReverseStringFromString:(NSString *)inputString {
if (inputString.length <= 0)
return inputString;
NSMutableString *mutableReverseString = [[NSMutableString alloc] initWithCapacity:inputString.length];
for (NSInteger i = inputString.length -1; i >= 0; i--) {
NSString *characterString = [inputString substringWithRange:NSMakeRange(i, 1)];
[mutableReverseString appendString:characterString];
}
NSString *outputString = [mutableReverseString copy];
[mutableReverseString release];
return [outputString autorelease];
}
然后您可以像这样使用此方法:
NSString *inputString = @"تجريب";
NSString *outputString = [self createReverseStringFromString:inputString];
答案 2 :(得分:2)
Cocoa的做法:
NSString *originalString = @"تجريب";
NSUInteger stringLength = originalString.length;
NSMutableString *reversedString = [[NSMutableString alloc] initWithCapacity:stringLength];
while (stringLength) {
[reversedString appendFormat:@"%C", [originalString characterAtIndex:--stringLength]];
}
NSLog(@"The reversed string is %@:", reversedString);
当使用ARC编译时,这将不会泄漏reversedString
。