我试图根据其他两个创建一个混合字符串,例如,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 =“嘿伙计们”;输出:错误
答案 0 :(得分:2)
你的问题很简单:
strtok
不是通灵者,也不知道你想要恢复早期的令牌序列,而不是它最后一次努力的序列。NULL
如果它无法返回令牌,那么
醇>
使用替换函数strtok_s
(可选C99 #define __STDC_WANT_LIB_EXT1__ 1
)或strtok_r
(POSIX),它是可重入的,因为它不使用任何静态内部存储。
如果你不能这样做,保存第一个序列,然后得到第二个序列。
下一个问题是两个句子中都有不同数量的标记。
您将遇到的最后一个问题(如果frase1
和frase2
足够长)会溢出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;
}