如何在objective-C中对字符串进行排序?

fra*_*yer 1 sorting iphone algorithm memory-management objective-c

我正在寻找一种在字符串中对字符进行排序的Objective-C方法,根据这个问题的答案.

理想情况下,该函数接受NSString并返回已排序的等效项.

另外,我想运行3次或更多次重复的长度编码序列.因此,例如"mississippi"首先变成"iiiimppssss",然后可以通过编码缩短为"4impp4s".

我不是Objective-C(更多的Java和C++背景)的专家,所以我也想知道什么是处理内存管理的最佳实践(保留计数等 - 在iphone上没有GC)返回这样一个函数的值.我的源字符串在iPhone搜索栏控件中,因此是一个NSString *.

小智 9

int char_compare(const char* a, const char* b) {
    if(*a < *b) {
        return -1;
    } else if(*a > *b) {
        return 1;
    } else {
        return 0;
    }
}

NSString *sort_str(NSString *unsorted) {
    int len = [unsorted length] + 1;
    char *cstr = malloc(len);
    [unsorted getCString:cstr maxLength:len encoding:NSISOLatin1StringEncoding];
    qsort(cstr, len - 1, sizeof(char), char_compare);
    NSString *sorted = [NSString stringWithCString:cstr encoding:NSISOLatin1StringEncoding];
    free(cstr);
    return sorted;
}
Run Code Online (Sandbox Code Playgroud)

返回值是自动释放的,所以如果你想在调用者中保持它,你需要保留它.不是Unicode安全的.