2011-04-21 19 views
0

創建的NSMutableString我有兩個字符串:從另外兩個NSMutableStrings

@"--U"@"-O-"並希望創建另一個的NSMutableString,使用兩個已知條件,使@"-OU"。有誰知道我該怎麼做?

回答

2

注意,下面的代碼假設S1和S2具有相同的長度,否則會拋出在某些時候例外,所以做檢查:)

- (NSMutableString *)concatString:(NSString *)s1 withString:(NSString *)s2 
{ 
    NSMutableString *result = [NSMutableString stringWithCapacity:[s1 length]]; 
    for (int i = 0; i < [s1 length]; i++) { 
     unichar c = [s1 characterAtIndex:i]; 
     if (c != '-') { 
      [result appendFormat:@"%c", c]; 
     } 
     else { 
      [result appendFormat:@"%c", [s2 characterAtIndex:i]]; 
     } 
    } 
    return result; 
} 
+0

這是完美的謝謝。訣竅是使用unichar :) – locoboy 2011-04-21 05:13:03

+1

還有一個關於代碼的假設:如果s1和s2在同一位置都有非「 - 」字符,則來自s1的字符將優先:) – Nick 2011-04-21 05:57:37

1
NSString *[email protected]"-0-"; 
    NSString *[email protected]"--U"; 

    NSString *temp1=[t1 substringWithRange:NSMakeRange(0, 2)]; 
    NSString *temp2=[t2 substringFromIndex:2]; 
    NSLog(@"%@",[NSString stringWithFormat:@"%@%@",temp1,temp2]); 
1

這個版本有點比Nick更囉嗦,但把它分解成C函數和尾遞歸,所以它可能運行得更快。它還處理不同長度的字符串,選擇鏡像較短的字符串長度。

注:我還沒有運行此代碼,所以它可能是越野車或缺少明顯的東西。

void recursiveStringMerge(unichar* string1, unichar* string2, unichar* result) { 
    if (string1[0] == '\0' || string2[0] == '\0') { 
     result[0] = '\0'; //properly end the string 
     return; //no use in trying to add more to this string 
    } 
    else if (string1[0] != '-') { 
     result[0] = string1[0]; 
    } 
    else { 
     result[0] = string2[0]; 
    } 
    //move on to the next unichar in each array 
    recursiveStringMerge(string1+1, string2+1, result+1); 
} 

- (NSMutableString *)concatString:(NSString *)s1 withString:(NSString *)s2 { 
    NSUInteger resultLength; 
    NSUInteger s1Length = [s1 length]+1; //ensure space for NULL with the +1 
    NSUInteger s2Length = [s2 length]+1; 

    resultLength = (s1Length <= s2Length) ? s1Length : s2Length; //only need the shortest 

    unichar* result = malloc(resultLength*sizeof(unichar)); 
    unichar *string1 = calloc(s1Length, sizeof(unichar)); 
    [s1 getCharacters:buffer]; 
    unichar *string2 = calloc(s2Length, sizeof(unichar)); 
    [s2 getCharacters:buffer]; 

    recursiveStringMerge(string1, string2, result); 
    return [NSString stringWithCharacters: result length: resultLength]; 
} 
相關問題