文字列の反転
Posted feedbacks - Objective-C
入力Shift-JISってことなんでC文字列にしてみた。 C文字列のまま処理してもいいけどそれだとまるっきりCのコードなので、 一度NSStringに変換後処理して最後にまたC文字列に戻すという…無駄ですね。 無駄でした。 こういうとこはCで書くか、 最初に全部NSStringにしちゃってプログラム中は一貫してNSStringで処理するか、 どっちかかな。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #import <Foundation/Foundation.h>
const char * reverse_string(const char * cString, NSStringEncoding encoding)
{
NSString* aString = [NSString stringWithCString:cString encoding:encoding];
NSMutableString* reversedString = [NSMutableString string];
int index;
for (index = [aString length] - 1; index >= 0; index--) {
[reversedString appendString:[aString substringWithRange:NSMakeRange(index, 1)]];
}
return [reversedString cStringUsingEncoding:encoding];
}
int main(int argc, const char *argv) {
NSAutoreleasePool* pool = [NSAutoreleasePool new];
const char * ss[3];
ss[0] = [@"Hello" cStringUsingEncoding:NSShiftJISStringEncoding];
ss[1] = [@"こんにちは" cStringUsingEncoding:NSShiftJISStringEncoding];
ss[2] = [@"濁点(だくてん)" cStringUsingEncoding:NSShiftJISStringEncoding];
NSLog(@"%s", reverse_string(ss[0], NSShiftJISStringEncoding));
NSLog(@"%s", reverse_string(ss[1], NSShiftJISStringEncoding));
NSLog(@"%s", reverse_string(ss[2], NSShiftJISStringEncoding));
[pool release];
return 0;
}
|
こっちはNSStringに反転メソッドを追加したもの。 あと、再帰にしてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #import <Foundation/Foundation.h>
@interface NSString (Reverse)
- (NSString *)reversedString;
@end
@implementation NSString (Reverse)
- (NSString *)reversedString
{
if ([self length] > 1)
{
return [[[self substringFromIndex:1] reversedString] stringByAppendingString:[self substringToIndex:1]];
}
else
{
return self;
}
}
@end
int main(int argc, const char *argv) {
NSAutoreleasePool* pool = [NSAutoreleasePool new];
NSLog([@"Hello" reversedString]);
NSLog([@"こんにちは" reversedString]);
NSLog([@"濁点(だくてん)" reversedString]);
[pool release];
return 0;
}
|
appendFormat を使ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #import <Foundation/Foundation.h>
const char* reverse_string(const char* input)
{
NSString* str = [NSString stringWithCString:input encoding:NSShiftJISStringEncoding];
NSMutableString* result = [NSMutableString string];
int i;
for (i=[str length]-1; i>=0; i--) {
[result appendFormat:@"%C", [str characterAtIndex:i]];
}
return [result cStringUsingEncoding:NSShiftJISStringEncoding];
}
int main(int argc, const char** argv)
{
NSAutoreleasePool* pool = [NSAutoreleasePool new];
const char* s[3];
s[0] = [@"Hello" cStringUsingEncoding:NSShiftJISStringEncoding];
s[1] = [@"こんにちは" cStringUsingEncoding:NSShiftJISStringEncoding];
s[2] = [@"濁点(だくてん)" cStringUsingEncoding:NSShiftJISStringEncoding];
int i;
for (i=0; i<3; i++) {
NSLog(@"%s", reverse_string(s[i]));
}
[pool release];
return 0;
}
|


にしお
#3414()
Rating0/2=0.00
サンプル入出力
>>> print reverse_string("Hello") olleH >>> print reverse_string("こんにちは") はちにんこ >>> print reverse_string("濁点(だくてん)") )んてくだ(点濁[ reply ]