Сортировка символов в NSString в алфавитном порядке

Я пытаюсь переставить слова в алфавитном порядке. Например, помидор стал бы совсем другим, или стек стал бы активным.

мы нашли несколько способов сделать это в C с массивами символов, но яУ меня возникли проблемы с тем, чтобы это работало в пределах объекта NSString.

Есть ли более простой способ сделать это внутри самого объекта NSString?

Ответы на вопрос(3)

Решение Вопроса

ржит только один символ из исходной строки). Тогда сортировка массива будет в порядке. Это неэффективно, но достаточно, когда строка не очень длинная. Я'мы проверили код.

NSString *str = @"stack";
NSMutableArray *charArray = [NSMutableArray arrayWithCapacity:str.length];
for (int i=0; i<str.length; ++i)="" {="" nsstring="" *charstr="[str" substringwithrange:nsmakerange(i,="" 1)];="" [chararray="" addobject:charstr];="" }="" *sortedstr="[[charArray" sortedarrayusingselector:@selector(localizedcaseinsensitivecompare:)]="" componentsjoinedbystring:@""];="" <="" code=""></str.length;>
 Josh Caswell10 дек. 2014 г., 21:45
Обратите внимание, что с помощьюsubstringWithRange: как это означает, что эта процедура не будет работать с составными символами, такими как, Это н'Это фатальное возражение, просто предупреждение.
 tiguero04 нояб. 2013 г., 00:10
имя вашего метода должно быть sortedArrayUsingComparator, а не sortUsingComparator
// --------- Function To Make an Array from String
NSArray *makeArrayFromString(NSString *my_string) {
    NSMutableArray *array = [[NSMutableArray alloc] init];
    for (int i = 0; i < my_string.length; i ++) {
        [array addObject:[NSString stringWithFormat:@"%c", [my_string characterAtIndex:i]]];
    }
    return array;

}

// --------- Function To Sort Array
NSArray *sortArrayAlphabetically(NSArray *my_array) {
    my_array= [my_array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
    return my_array;
}

// --------- Function Combine Array To Single String
NSString *combineArrayIntoString(NSArray *my_array) {
    NSString * combinedString = [[my_array valueForKey:@"description"] componentsJoinedByString:@""];
    return combinedString;
}




// Now you can call the functions as in below where string_to_arrange is your string
    NSArray *blowUpArray;
    blowUpArray = makeArrayFromString(string_to_arrange);
    blowUpArray = sortArrayAlphabetically(blowUpArray);
    NSString *arrayToString= combineArrayIntoString(blowUpArray);
    NSLog(@"arranged string = %@",arrayToString);

NSArray изNSNumber объекты, а затем сортировать это. Кажется, немного дороже, поэтому я бы, возможно, просто использоватьqsort() вместо.

Вот этопредоставляется в качестве категории Objective-C (не проверено):

NSString + SortExtension.h:

#import <foundation foundation.h="">

@interface NSString (SortExtension)
- (NSString *)sorted;
@end
</foundation>

NSString + SortExtension.m:

#import "NSString+SortExtension.h"

@implementation NSString (SortExtension)

- (NSString *)sorted
{
    // init
    NSUInteger length = [self length];
    unichar *chars = (unichar *)malloc(sizeof(unichar) * length);

    // extract
    [self getCharacters:chars range:NSMakeRange(0, length)];

    // sort (for western alphabets only)
    qsort_b(chars, length, sizeof(unichar), ^(const void *l, const void *r) {
        unichar left = *(unichar *)l;
        unichar right = *(unichar *)r;
        return (int)(left - right);
    });

    // recreate
    NSString *sorted = [NSString stringWithCharacters:chars length:length];

    // clean-up
    free(chars);

    return sorted;
}

@end

Ваш ответ на вопрос