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安全的.