我已经在谷歌上搜索了很多关于如何做到这一点的信息,但是我如何才能逆转一个NSString呢?例如:hi会变成: ih
我正在寻找最简单的方法来做到这一点。
谢谢!
@Vince我做了这样的方法:
- (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;
}
我将该方法与textfield1的didendonexit关联起来。当我单击done按钮时,它不会反转文本,UILabel只显示我输入的UITextField的文本。怎么啦?
发布于 2011-07-18 16:28:35
数据块版本。
NSString *myString = @"abcdefghijklmnopqrstuvwxyz";
NSMutableString *reversedString = [NSMutableString stringWithCapacity:[myString length]];
[myString enumerateSubstringsInRange:NSMakeRange(0,[myString length])
options:(NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences)
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[reversedString appendString:substring];
}];
// reversedString is now zyxwvutsrqponmlkjihgfedcba
发布于 2014-04-16 15:02:38
对任何对象使用方法: NSString、NSNumber等:
NSLog(@"%@",[self reverseObject:@12345]);
NSLog(@"%@",[self reverseObject:@"Hello World"]);
方法:
-(NSString*)reverseObject:(id)string{
string = [NSString stringWithFormat:@"%@",string];
NSMutableString *endString = [NSMutableString new];
while ([string length]!=[endString length]) {
NSRange range = NSMakeRange([string length]-[endString length]-1, 1);
[endString appendString: [string substringWithRange:range]];
}
return endString;}
日志:
2014-04-16 11:20:25.312 TEST[23733:60b] 54321
2014-04-16 11:20:25.313 TEST[23733:60b] dlroW olleH
发布于 2011-07-19 02:03:27
如果只迭代字符串的一半,交换两端的字符,会不会更快?因此,对于一个5个字符的字符串,您可以交换字符1+ 5,然后2+4和3不需要与任何字符交换。
NSMutableString *reversed = [original mutableCopyWithZone:NULL];
NSUInteger i, length;
length = [reversed length];
for (i = 0; i < length / 2; i++) {
// Store the first character as we're going to replace with the character at the end
// in the example, it would store 'h'
unichar startChar = [reversed characterAtIndex:i];
// Only make the end range once
NSRange endRange = NSMakeRange(length - i, 1);
// Replace the first character ('h') with the last character ('i')
// so reversed now contains "ii"
[reversed replaceCharactersInRange:NSMakeRange(i, 1)
withString:[reversed subStringWithRange:endRange];
// Replace the last character ('i') with the stored first character ('h)
// so reversed now contains "ih"
[reversed replaceCharactersInRange:endRange
withString:[NSString stringWithFormat:@"%c", startChar]];
}
编辑
做了一些测试后,答案是否定的,它比循环遍历所有东西的版本慢6倍。让我们慢下来的是为replaceCharactersInRange: NSStrings方法创建临时字符串。这里有一种方法,通过直接操作字符数据只创建一个NSString,在简单的测试中似乎要快得多。
NSUInteger length = [string length];
unichar *data = malloc(sizeof (unichar) * length);
int i;
for (i = 0; i < length / 2; i++) {
unichar startChar = [string characterAtIndex:i];
unichar endChar = [string characterAtIndex:(length - 1) - i];
data[i] = endChar;
data[(length - 1) - i] = startChar;
}
NSString *reversed = [NSString stringWithCharacters:data length:length];
free(data);
https://stackoverflow.com/questions/6720191
复制相似问题