2012-11-13 10 views
6

मैं शब्दों को वर्णानुक्रम में पुन: व्यवस्थित करने की कोशिश कर रहा हूं। उदाहरण के लिए, टमाटर अजीब हो जाएगा, या ढेर अखरोट बन जाएगा।एनएसएसटींग में वर्णमाला क्रम में वर्णों को क्रमबद्ध करें

मुझे चार एरे के साथ सी में ऐसा करने के कुछ तरीके मिल गए हैं, लेकिन मुझे एनएसएसटींग ऑब्जेक्ट की सीमाओं के भीतर काम करने में समस्याएं आ रही हैं।

क्या एनएसएसटींग ऑब्जेक्ट के भीतर इसे करने का कोई आसान तरीका है?

उत्तर

4

मैं अलग लगता है स्ट्रिंग की सरणी के लिए स्ट्रिंग (सरणी में प्रत्येक स्ट्रिंग में मूल स्ट्रिंग से केवल एक char होता है)। फिर सरणी को ठीक करें। यह कुशल नहीं है लेकिन स्ट्रिंग बहुत लंबा नहीं होने पर पर्याप्त है। मैंने कोड का परीक्षण किया है।

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]; 
} 

NSString *sortedStr = [[charArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] componentsJoinedByString:@""]; 
+1

अपने विधि नाम sortedArrayUsingComparator हो सकता है और नहीं करना चाहिए sortUsingComparator – tiguero

+1

ध्यान दें कि का उपयोग करते हुए 'substringWithRange:' इसका मतलब यह है की तरह है कि इस प्रक्रिया के '' हे की तरह बना पात्रों के साथ काम नहीं करेगा। यह एक घातक आपत्ति नहीं है, केवल एक चेतावनी है। –

10

आप NSNumber के NSArray वस्तुओं में स्ट्रिंग के पात्रों में से प्रत्येक संग्रहीत कर सकती है और फिर उस छांटते हैं। थोड़ा महंगा लगता है, इसलिए मैं शायद इसके बजाय qsort() का उपयोग करूंगा।

यहाँ यह एक ऑब्जेक्टिव-सी श्रेणी (untested) के रूप में प्रदान की जाती है:

NSString + SortExtension.h:

#import <Foundation/Foundation.h> 

@interface NSString (SortExtension) 
- (NSString *)sorted; 
@end 

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 
2
// --------- 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); 
संबंधित मुद्दे