печатать обратную строку - PullRequest
0 голосов
/ 14 февраля 2011

Я пишу программу, которая печатает обратную строку в текстовом поле, принимая входной текст из другого текстового поля. Когда я нажимаю клавишу ввода после ввода текста в одно текстовое поле, результат (обратный) должен отображаться в другом текстовом поле.

Я пытался так, но получаю странные результаты.

.h файл:

#import <UIKit/UIKit.h>


@interface reverseVC : UIViewController {

    UITextField *textEntered;
    UITextField *textDisplay;

}
@property (nonatomic,retain) IBOutlet UITextField *textDisplay;
@property (nonatomic,retain) IBOutlet UITextField *textEntered;

- (NSMutableArray*) stringReverse;
- (IBAction) enter;

@end

.m файл

- (NSMutableArray *) stringReverse
{

    NSString *value = textEntered.text;
    NSArray *tempArray = [[[NSArray alloc] initWithObjects:value,nil] autorelease];

    NSMutableArray *arr = [[[NSMutableArray alloc] init] autorelease];


    for (int i=[tempArray count]-1; i>=0; i--)
    {
        [arr addObject:[tempArray objectAtIndex:i]];
        NSLog(@"the object is:%c",arr);
    }

    return arr;
}
-(IBAction)enter
{
   textDisplay.text = [NSString stringWithFormat:@"%c",[self stringReverse]];
}

Ранее были получены предупреждения, такие как SIG_ABT и EXE_BAD_ACCESS, перед размещением nil и autorelease в инициализации массива. Теперь предупреждения устранены, но результаты нежелательны.

Куда я иду не так?

Ответы [ 6 ]

9 голосов
/ 14 февраля 2011

Вы вставляете объект NSString в свой массив.Счетчик равен 1. Вы должны перейти от конца строки к началу и добавить символ к новой строке.Вы можете сделать это так:

-(NSString*)reverseString:(NSString*)string {
    NSMutableString *reversedString;
    int length = [string length];
    reversedString = [NSMutableString stringWithCapacity:length];

    while (length--) {
            [reversedString appendFormat:@"%C", [string characterAtIndex:length]];
    }

    return reversedString;
}
5 голосов
/ 14 февраля 2011

Другой способ обратить строки - использовать перечислитель обратной строки.

- (NSString *)reverseString:(NSString *)string {
    NSMutableString *reversedString = [[NSMutableString alloc] init];
    NSRange fullRange = [string rangeOfString:string];
    NSStringEnumerationOptions enumerationOptions = (NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences);
    [string enumerateSubstringsInRange:fullRange options:enumerationOptions usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
        [reversedString appendString:substring];
    }];
    return reversedString;
}
3 голосов
/ 14 февраля 2011

используйте это

NSString *str=textEntered.text;//
    NSMutableArray *temp=[[NSMutableArray alloc] init];
    for(int i=0;i<[str length];i++)
    {
        [temp addObject:[NSString stringWithFormat:@"%c",[str characterAtIndex:i]]];
    }
    temp = [NSMutableArray arrayWithArray:[[temp reverseObjectEnumerator] allObjects]];
    NSString *reverseString=@"";
    for(int i=0;i<[temp count];i++)
    {
        reverseString=[NSString stringWithFormat:@"%@%@",reverseString,[temp objectAtIndex:i]];
    }
    NSLog(@"%@",reverseString);
0 голосов
/ 12 января 2013

Использование characterAtIndex плохо работает с не-ascii символами.

- (NSString *)reverseMyString:(NSString *)string {
    NSString *output = [[NSString alloc] init];
    for(int i = string.length-1; i>=0; i--) {
        output = [output stringByAppendingString:[string substringWithRange:NSMakeRange(i, 1)]];
    }

    return output;
}
0 голосов
/ 30 августа 2012
NSString *str = @"hello";
int length = [str length];

NSLog(@"%d",length);

NSMutableString *rev = [[NSMutableString alloc] initWithCapacity:[str length]];
while (length > 0) {
    --length;
    [rev appendString:[NSString stringWithFormat:@"%c", [str characterAtIndex:length]]];
}

NSLog(@"%@", rev);
0 голосов
/ 08 августа 2012

Я переворачиваю свои строки с помощью нескольких строк кода.Скорее поздно, но просто выкладываю это там:)

- (NSString*) reverseMyString:(NSString*)theString
{
    NSString *final = @"";
    for(int i = theString.length-1; i>=0; i--)
        final = [NSString stringWithFormat:@"%@%c", final, [theString characterAtIndex:i]];
    return final;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...