iphone - 以相反的顺序打印unicode NSString

标签 iphone objective-c ios

我已使用此代码以相反的顺序打印英文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)字符串)的反向版本?

最佳答案

在第一次调用%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);

关于iphone - 以相反的顺序打印unicode NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960989/

相关文章:

ios - 我想用WKWebView加载时自动播放

objective-c - Objective-C中的私有(private)方法

iphone - 让 UIPicker 至少有一英尺的值?

objective-c - 按钮在运行时不可见(cocoa Objective-C)?

iphone - 无法将按钮添加到 TableView 工具栏

ios - 3D Touch - Peek 和 Pop - 应该返回 UIViewController 但视频尚未准备好

ios - 将 paypal 访问与 ios 应用程序集成

ios - 如果您点击主页然后再次打开应用程序,如何重新加载功能?

ios - 从 iOS 7 开始不推荐使用坐标

iphone - 通过蓝牙通信的 iOS5 Bonjour 的 DNSServiceRegister 和 DNSServiceBrowse 示例