有没有一种方法来对NSString进行排序?

Pen*_*One 4 sorting iphone objective-c nsstring

有谁知道是否有一种方法来对ASCII字符的NSString进行排序?理想情况下,我想要一个方法来检查一个字符串是否是另一个字符串的排列,所以我的想法是以规范的方式对两个字符串进行排序,然后比较它们.任何想法将不胜感激.谢谢.

编辑:这是我更精确的事情.我想要一个方法,它接受两个NSStrings输入并返回一个BOOL:

- (BOOL)isPermutation:(NSString *)string1 
             ofString:(NSString *)string2; 
Run Code Online (Sandbox Code Playgroud)

返回值应该是YES一个字符串可以重新排列到另一个字符串中,NO否则.

NSString的是用ASCII字符的任意字符串,而不是句子或数字或单词.只是带有ASCII字符的任意字符串.

tas*_*oor 7

你真的需要排序来检查这个吗?考虑算法.

create 2 counter arrays, ac and bc, both of size 128
initialize them with 0
for each char c in string a make ac[c]++
for each char c in string b make bc[c]++
if all 128 counters in ac and bc are same, then they r permutation of one another

这可能甚至比排序更快.

编辑:这是一个可能的实现.由于我没有编译代码,可能会有一些小错误.

- (BOOL)isPermutation:(NSString *)string1 ofString:(NSString *)string2 {
    if ([string1 length] != [string2 length]) {
        return FALSE;    
    }

    NSInteger counter1[128];
    NSInteger counter2[128];
    NSInteger i;
    NSInteger len = [string1 length];

    for (i = 0; i < 128; i++) {
        counter1[i] = counter2[i] = 0;
    }

    for (i = 0; i < len; i++) {
        unichar ch1 = [string1 characterAtIndex:i];
        unichar ch2 = [string2 characterAtIndex:i];
        counter1[ch1]++;
        counter2[ch2]++;
    }

    for (i = 0; i < 128; i++) {
        if (counter1[i] != counter2[i]) {
            return FALSE;
        }
    }

    return TRUE;
}