Обратный текст NSString - PullRequest
51 голосов
/ 17 июля 2011

Я так много гуглял, как это сделать, но как бы я изменил NSString? Пример: привет станет: IH

Я ищу самый простой способ сделать это.

Спасибо!

@ Винс, я сделал этот метод:

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

Я подключил этот метод к didendonexit textfield1. Когда я нажимаю кнопку «Готово», текст не переворачивается, UILabel просто показывает введенный мной текст UITextField. Что не так?

Ответы [ 19 ]

1 голос
/ 16 мая 2013

Перевернуть строку с помощью рекурсии:

@implementation NSString (Reversed)

+ (NSString *)reversedStringFromString:(NSString *)string
{
    NSUInteger count = [string length];

    if (count <= 1) { // Base Case
        return string;
    } else {
        NSString *lastLetter = [string substringWithRange:NSMakeRange(count - 1, 1)];
        NSString *butLastLetter = [string substringToIndex:count - 1];
        return [lastLetter stringByAppendingString:[self reversedStringFromString:butLastLetter]];
    }
}

@end
0 голосов
/ 26 марта 2017

Свифт:

let string = "reverse"
let reversedStringCollection = string.characters.reversed()

for character in reversedStringCollection {
    reversedString.append(character)
    print(reversedString)
}
0 голосов
/ 21 июня 2013

Я написал одну или несколько категорий: 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
0 голосов
/ 12 апреля 2013

Добавьте категорию к NSString, чтобы в будущем вы могли вызывать реверс на любой строке NSS, например:

#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
0 голосов
/ 27 июля 2015

Вот коллекция категорий в Objective-C, которая обратит NSStrings и NSAttributedStrings (при сохранении атрибутов символов): TextFlipKit

Например:

NSString *example = @"Example Text";

NSString *reversed = example.tfk_reversed;

NSLog(@"Reversed: %@", reversed);

//prints 'Reversed: txeT elpmaxE'
0 голосов
/ 12 августа 2013

У меня есть два простых решения для этой цели:

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

Теперь давайте проверим это!

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

Результаты:

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

И другие символырезультат был:

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

Тот же текст с вышеуказанными функциями:

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

Итак, выберите производительность!

0 голосов
/ 09 сентября 2013
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]];
}
0 голосов
/ 24 мая 2018

Мы также можем получить обратную строку следующим образом.

NSString *originalString = @"Hello";
NSString *reverseString;
for (NSUInteger index = originalString.length; index > 0; index--) {
    char character = [originalString characterAtIndex:index];
    reverseString = [reverseString stringByAppendingString:[NSString stringWithFormat:@"%c", character]];
}

или

NSString *originalString = @"Hello";
NSString *reverseString;
for (NSUInteger index = originalString.length; index > 0; index--) {
   char *character = [originalString characterAtIndex:index];
   reverseString = [reverseString stringByAppendingString:[NSString stringWithFormat:@"%s", character]];
}
0 голосов
/ 17 июля 2011

Google твой друг :

-(NSString *) reverseString
{
  NSMutableString *reversedStr;
  int len = [self length];

  // Auto released string
  reversedStr = [NSMutableString stringWithCapacity:len];     

  // Probably woefully inefficient...
  while (len > 0)
    [reversedStr appendString:
         [NSString stringWithFormat:@"%C", [self characterAtIndex:--len]]];   

  return reversedStr;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...