ReversibleString(81)

#import <Foundation/NSString.h>
#import <Foundation/NSMethodSignature.h>
#import <Foundation/NSInvocation.h>
#import <stdio.h>
#import <stdlib.h>

@interface ReversibleString:NSObject {
    NSString *content;
}
- (id)initWithString:(NSString *)string;
- (id)reversedString;
@end

@implementation ReversibleString

- (id)initWithString:(NSString *)string {
    if ((self = [super init]) != nil)
        content = string;
    return self;
}

- (id)reversedString {
    unichar *buffer; //将Unicode字符串反转
    int length, i, j, tmp;
    id reversed;
    
    if ((length = (int)[content length]) <= 0)
        return @"";
    buffer = malloc(sizeof(unichar) * length);
    [content getCharacters:buffer range:NSMakeRange(0, length)];
    for (i = 0,j = length - 1; i < j; i++, j--)
        tmp = buffer[i], buffer[i] = buffer[j], buffer[j] = tmp;
    reversed = [NSString stringWithCharacters:buffer length:length];
        
    free(buffer);
    return reversed;
}

- (void)forwardInvocation:(NSInvocation *)anInvocation {
    SEL sel = [anInvocation selector];
    if ([content respondsToSelector:sel])
        [anInvocation invokeWithTarget:content];
    else
        [super forwardInvocation:anInvocation];
}

- (BOOL)respondsToSelector:(SEL)aSelector {
    if ([super respondsToSelector:aSelector])
        return YES;
    if ([self methodForSelector:aSelector] != (IMP)NULL)
        return YES;
    if ([content respondsToSelector:aSelector])
        return YES;
    return NO;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    if ([super respondsToSelector:aSelector])
        return [super methodSignatureForSelector:aSelector];
    return [content methodSignatureForSelector:aSelector];
}

@end

int main(void) {
    char buf[100];
    id s, a, b, c, d, e;
    @autoreleasepool {
        scanf("%s", buf);
        s = [NSString stringWithUTF8String:buf];
        a = [[ReversibleString alloc] initWithString:s];
        b = [[ReversibleString alloc] initWithString:@"Reverse?"];
        printf("%s\n", [a UTF8String]);
        c = [[a reversedString] stringByAppendingString:b];
        printf("%s\n", [c UTF8String]);
        d = [[ReversibleString alloc] initWithString:c];
        e = [b stringByAppendingString:[d reversedString]];
        printf("%s\n", [e UTF8String]);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值