如何基于其他两个字符串创建一个字符串?

时间:2014-05-16 00:38:14

标签: c string

我试图根据其他两个创建一个混合字符串,例如,string1 =“Good Morning”和string2 =“Hello guys”,所以我的脚本会输出:“Good Hello Morning guys”。

我差不多完成了..我尝试了什么:

int main() {
  char frase1[99];
  char frase2[99];
  int i =0;
  char frase3[99];

  printf("Type a sentence: ");
  gets(frase1);
  printf("Type a sentence: ");
  gets(frase2);

  char * pch1;
  char * pch2;

  pch1 = strtok (frase1," ");
  pch2 = strtok (frase2," ");

  while (pch1) {
    strcat(frase3,pch1); 
    pch1 = strtok (NULL, " ");

    strcat(frase3,pch2); 
    pch2 = strtok (NULL, " ");
  }
  puts(frase3);
}

输出:示例:frase1 =“早上好”; frase2 =“嘿伙计们”;输出:错误

2 个答案:

答案 0 :(得分:2)

你的问题很简单:

  1. strtok不是通灵者,也不知道你想要恢复早期的令牌序列,而不是它最后一次努力的序列。
  2. 它只会返回NULL如果它无法返回令牌,那么

    使用替换函数strtok_s(可选C99 #define __STDC_WANT_LIB_EXT1__ 1)或strtok_r(POSIX),它是可重入的,因为它不使用任何静态内部存储。
    如果你不能这样做,保存第一个序列,然后得到第二个序列。

    下一个问题是两个句子中都有不同数量的标记。

    您将遇到的最后一个问题(如果frase1frase2足够长)会溢出frase3:这应该至少与两者合并。

答案 1 :(得分:0)

#include <stdio.h>
#include <string.h>

int main() {
    char frase1[99];
    char frase2[100] = {' '};
    char frase3[sizeof(frase1)+sizeof(frase2)];

    printf("Type a sentence: ");
    scanf("%98[^\n]", frase1);
    printf("Type a sentence: ");
    scanf(" %98[^\n]", frase2+1);

    char *pch1, *pch2, *pch3;
    int len1, len2;

    pch1 = frase1;
    pch2 = frase2;
    pch3 = frase3;

    while (*pch1 || *pch2) {
        if(*pch1){
            sscanf(pch1, "%*s%n", &len1);
            memcpy(pch3, pch1, len1);
            pch1 += len1;
            pch3 += len1;
        }
        if(*pch2){
            sscanf(pch2, "%*s%n", &len2);
            memcpy(pch3, pch2, len2);
            pch2 += len2;
            pch3 += len2;
        }
    }
    *pch3 = '\0';
    puts(frase3);
    return 0;
}