我想在C中创建一个程序,我有一个字符串,例如“早安”和其他一个“你好吗”。因此,程序将根据这两个字符串制作一个,例如“Good How Morning are you”。
我试过了:
char string_1[99];
char string_2[99];
mix(string_1 + string_2);
答案 0 :(得分:1)
这是您可以尝试的算法:
复制第一个字符串的每个字符,直到达到white space
while(src1[i]!=' ') {
dest[i] = src[i];
i++;
}
然后切换到其他字符串并复制到空格。
当一个字符串完成时,别忘了处理大小写。然后你只需按原样复制第二个。
答案 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