0

私は2つの文字列を持っています:

@"--U"そして、2つの与え@"-O-"られたものを使用する別のNSMutableStringを作成したいと@"-OU"思います。誰かが私がこれを行う方法を知っていますか?

4

3 に答える 3

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;
}
于 2011-04-21T04:39:07.263 に答える
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];
}
于 2011-04-21T05:23:28.350 に答える
1
    NSString *t1=@"-0-";
    NSString *t2=@"--U";

    NSString *temp1=[t1 substringWithRange:NSMakeRange(0, 2)];
    NSString *temp2=[t2 substringFromIndex:2];
    NSLog(@"%@",[NSString stringWithFormat:@"%@%@",temp1,temp2]);
于 2011-04-21T04:56:49.617 に答える