51 votes

Inverser le texte NSString

J'ai beaucoup cherché sur Google comment faire, mais comment inverser une NSString ? Ex : hi deviendrait : ih

Je cherche le moyen le plus simple de le faire.

Merci !

@Vince j'ai fait cette méthode :

- (IBAction)doneKeyboard {

// first retrieve the text of textField1
NSString *myString = field1.text;
NSMutableString *reversedString = [NSMutableString string];
NSUInteger charIndex = 0;
while(myString && charIndex < [myString length]) {
    NSRange subStrRange = NSMakeRange(charIndex, 1);
    [reversedString appendString:[myString substringWithRange:subStrRange]];
    charIndex++;
}
// reversedString is reversed, or empty if myString was nil
field2.text = reversedString;
}

J'ai relié cette méthode au didendonexit de textfield1. Lorsque je clique sur le bouton "done", le texte n'est pas inversé, l'UILabel affiche simplement le texte du UITextField que j'ai saisi. Quel est le problème ?

-1voto

sarit bahuguna Points 21
str=@"india is my countery";
array1=[[NSMutableArray alloc] init];
for(int i =0 ;i<[str length]; i++) {
    NSString *singleCharacter  = [NSString stringWithFormat:@"%c", [str characterAtIndex:i]];
    [array1 addObject:singleCharacter];
}

NSMutableString* theString = [NSMutableString string];

for (int i=[array1 count]-1; i>=0;i--){
    [theString appendFormat:@"%@",[array1 objectAtIndex:i]];
}

-1voto

Paul Robinson Points 3226

Ajoutez une catégorie à NSString pour que vous puissiez appeler reverse sur n'importe quel NSString dans le futur comme ceci :

#import "NSString+Reverse.h"

@implementation NSString (Reverse)
-(NSString*)reverse {
  char* cstring = (char*)[self UTF8String];
  int length = [self length]-1;

  int i=0;

  while (i<=length) {
    unichar tmp = cstring[i];
    cstring[i] = cstring[length];
    cstring[length] = tmp;
    i++;
    length--;
  }

  return [NSString stringWithCString:cstring encoding:NSUTF8StringEncoding];

}
@end

-2voto

HotJard Points 393

Je propose deux solutions simples à cet effet :

+(NSString*)reverseString:(NSString *)str
{
    NSMutableString* reversed = [NSMutableString stringWithCapacity:str.length];
    for (int i = (int)str.length-1; i >= 0; i--){
         [reversed appendFormat:@"%c", [str characterAtIndex:i]];
    }
    return reversed;
}

+(NSString*)reverseString2:(NSString *)str
{
    char* cstr = (char*)[str UTF8String];
    int len = (int)str.length;
    for (int i =  0; i < len/2; i++) {
        char buf = cstr[i];
        cstr[i] = cstr[len-i-1];
        cstr[len-i-1] = buf;
    }
    return [[NSString alloc] initWithBytes:cstr length:len encoding:NSUTF8StringEncoding];
}

Maintenant, testons-le !

NSString* str = @"Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language";
NSLog(@"REV 1: %@", [Util reverseString:str]);
start = [NSDate date];
for (int i = 0 ; i < 1000; ++i)
    [Util reverseString:str];
end = [NSDate date];
NSLog(@"Time per 1000 repeats: %f", [end timeIntervalSinceDate:start]);

NSLog(@"REV 2: %@", [Util reverseString2:str]);
start = [NSDate date];
for (int i = 0 ; i < 1000; ++i)
    [Util reverseString2:str];
end = [NSDate date];
NSLog(@"Time per 1000 repeats: %f", [end timeIntervalSinceDate:start]);

Résultats :

ConsoleTestProject[68292:303] REV 1: egaugnal gnimmargorp C eht ot gnigassem elyts-klatllamS sdda taht egaugnal gnimmargorp detneiro-tcejbo ,esoprup-lareneg a si C-evitcejbO
ConsoleTestProject[68292:303] Time per 1000 repeats: 0.063880
ConsoleTestProject[68292:303] REV 2: egaugnal gnimmargorp C eht ot gnigassem elyts-klatllamS sdda taht egaugnal gnimmargorp detneiro-tcejbo ,esoprup-lareneg a si C-evitcejbO
ConsoleTestProject[68292:303] Time per 1000 repeats: 0.002038

Et le résultat était plus de personnages :

ConsoleTestProject[68322:303] chars: 1982
ConsoleTestProject[68322:303] Time 1 per 1000 repeats: 1.014893
ConsoleTestProject[68322:303] Time 2 per 1000 repeats: 0.024928

Le même texte avec les fonctions ci-dessus :

ConsoleTestProject[68366:303] Time 1 per 1000 repeats: 0.873574
ConsoleTestProject[68366:303] Time 2 per 1000 repeats: 0.019300
ConsoleTestProject[68366:303] Time 3 per 1000 repeats: 0.342735 <-Vladimir Gritsenko
ConsoleTestProject[68366:303] Time 4 per 1000 repeats: 0.584012 <- Jano

Alors, choisissez la performance !

-2voto

Enrico Bottani Points 99

J'ai écrit une catégorie sur ce sujet :D

//NSString+Reversed.h #import

//
//  NSString+Reversed.h
//  HTMLPageFormatter
//  Created by beit46 on 21.06.13.
//  

@interface NSString (Reversed)
- (NSString *)reversedString;
@end

//NSString+Reversed.m

//
//  NSString+Reversed.m
//  HTMLPageFormatter
//  Created by beit46 on 21.06.13.
#import "NSString+Reversed.h"

@implementation NSString (Reversed)
- (NSString *)reversedString {
    NSMutableString *reversedString = [NSMutableString stringWithCapacity:[self length]];

    [self enumerateSubstringsInRange:NSMakeRange(0,[self length])
                                 options:(NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences)
                              usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                                  [reversedString appendString:substring];
                              }];
    return [reversedString copy];
}
@end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X