2012-03-31 77 views

回答

8

不清楚您是否只是打印遞增的字符或全部。如果前者,你會怎麼做:

NSString *myString = @"myString"; 
NSMutableString *newString = [NSMutableString string]; 
for (int i = 0; i < [myString length]; i++) 
{ 
    int ascii = [myString characterAtIndex:i]; 
    if (i % 3 == 0) 
    { 
     ascii++; 
     [newString appendFormat:@"%c",ascii]; 
    } 
} 
myLabel.text = newString; 
+1

我wouldn' t推薦這個,這是極其緩慢的運行,它給你的數值,而不是字符值。 – 2012-03-31 15:29:50

+0

有我修正了錯誤的格式字符。他必須把它放在一個標籤中......你覺得這個字符串有多大/多慢?此外,他要求提供Objective-c。 – Vinnie 2012-03-31 15:45:09

+3

@Richard謹防優先考慮。 – zaph 2012-03-31 15:48:21

1

這會做詭計嗎?

NSString *incrementString(NSString *input) 
{ 
    const char *inputUTF8 = [input UTF8String]; // notice we get the buffers so that we don't have to deal with the overhead of making many message calls. 
    char *outputUTF8 = calloc(input.length + 1, sizeof(*outputUTF8)); 

    for (int i = 0; i < input.length; i++) 
    { 
     outputUTF8[i] = i % 3 == 0 ? inputUTF8[i] + 3 : inputUTF8[i]; 
    } 

    NSString *ret = [NSString stringWithUTF8String:outputUTF8]; 
    free(outputUTF8); // remember to free the buffer when done! 
    return ret; 
} 
+0

使用這樣的堆棧分配數組是危險的。如果字符串太長,你會粉碎堆棧並崩潰。你應該動態地分配一個緩衝區(即用'calloc()'或者等效的)並且在完成時釋放它。 – 2012-03-31 15:27:13

+0

@JonathanGrynspan好點,固定。 – 2012-03-31 15:28:46

+0

考慮到如果傳遞一個實際的UTF8字符串會失敗,那麼在該代碼中有很多名爲UTF8的變量;-)'[NSString length]'返回字符串的Unicode長度。不是它的字節長度。 – 2012-03-31 15:53:05