如何在C中根据其他两个制作一个字符串?

时间:2014-05-15 19:18:19

标签: c string

我想在C中创建一个程序,我有一个字符串,例如“早安”和其他一个“你好吗”。因此,程序将根据这两个字符串制作一个,例如“Good How Morning are you”。

我试过了:

 char string_1[99];
 char string_2[99];

mix(string_1 + string_2);

2 个答案:

答案 0 :(得分:1)

这是您可以尝试的算法:

  1. 查找组合字符串的长度并分配内存。
  2. 复制第一个字符串的每个字符,直到达到white space

    while(src1[i]!=' ') {
        dest[i] = src[i];
        i++;
    }
    
  3. 然后切换到其他字符串并复制到空格。

  4. 在步骤2和3之间保持交替直到结束
  5. 在结尾追加'\ 0'。
  6. 当一个字符串完成时,别忘了处理大小写。然后你只需按原样复制第二个。

答案 1 :(得分:1)

以下是您描述的mix方法

的一种可能实现方式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define set(ret, b, bPos, start, rPos, bLen) \
            ret[rPos++] = b[bPos++]; \
            if (b[bPos] == ' ' || b[bPos] == '\0') { \
                start = !start; \
                ret[rPos++]=' '; \
                if (bPos < bLen) bPos++; \
            }


char *mix (char *a, char *b);

int main (int argc, char *argv[]) {
    char *string_1 = "Good Morning";
    char *string_2 = "How are you";
    char *out = mix (string_1, string_2);
    printf ("%s\n", out);
    free (out);
}

char * mix (char *a, char *b) {
    bool start = true;
    const size_t aLen = strlen(a);
    const size_t bLen = strlen(b);
    const size_t rLen = 2 + aLen + bLen;
    char *ret = malloc (rLen);
    size_t aPos = 0;
    size_t bPos = 0;
    size_t rPos = 0;
    while (aPos < aLen || bPos < bLen) {
        if (start && aPos < aLen) {
            set(ret, a, aPos, start, rPos, aLen);
        } else if (bPos < bLen) {
            set(ret, b, bPos, start, rPos, bLen);
        }
    }
    return ret;
}

输出

Good How Morning are you