我知道这是一个令人困惑的标题,但基本上我的字符串是"你好"和string2是"那里"
我需要创建一个混合的第三个字符串,如: H t e h l e l r o e(加粗以便您可以更好地看到它)。
我是C的新手,说实话,我甚至不确定如何开始这样做。我知道肯定应该有一个for循环可能有类似string1 [i-1]!=' \ 0'在中间。非常感激您的帮忙!
答案 0 :(得分:1)
我们初学者应该互相帮助。
这是一个演示程序,显示了如何做到这一点
#include <stdio.h>
#include <string.h>
int main( void )
{
char *s1 = "Hello";
char *s2 = "there";
char s3[strlen( s1 ) + strlen( s2 ) + 1];
char *p1 = s1, *p2 = s2, *p3 = s3;
int first = 0;
while ( *p1 && *p2 )
{
*p3++ = ( first ^= 1 ) ? *p1++ : *p2++;
}
while ( *p1 ) *p3++ = *p1++;
while ( *p2 ) *p3++ = *p2++;
*p3 = '\0';
puts( s1 );
puts( s2 );
puts( s3 );
return 0;
}
程序输出
Hello
there
Htehlelroe
这三个陈述
while ( *p1 ) *p3++ = *p1++;
while ( *p2 ) *p3++ = *p2++;
*p3 = '\0';
可以替代
while ( *p1 ) *p3++ = *p1++;
while ( *p3++ = *p2++ );
如果编译器不支持可变长度数组,那么您需要使用malloc动态分配数组s3。
例如
char *s3 = malloc( strlen( s1 ) + strlen( s2 ) + 1 );
如果前两个字符串是“Hello”和“goodbye”,那么输出将是
Hello
goodbye
Hgeololdobye
您还可以使用 @Pedro Rodrigues 帖子中显示的方法。例如
#include <stdio.h>
#include <string.h>
int main( void )
{
char *s1 = "Hello";
char *s2 = "there";
char s3[strlen( s1 ) + strlen( s2 ) + 1];
char *p1 = s1, *p2 = s2, *p3 = s3;
do
{
if ( *p1 ) *p3++ = *p1++;
if ( *p2 ) *p3++ = *p2++;
} while ( *p1 || *p2 );
*p3 = '\0';
puts( s1 );
puts( s2 );
puts( s3 );
return 0;
}
与 @Pedro Rodrigues 所示的程序相同,但它不使用索引。
答案 1 :(得分:1)
不确定你为解决这个问题付出了多少努力,但这里有一种解决方法:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
if(argc != 3)
{
printf("Give me two strings!");
return 1;
}
int len = strlen(argv[1]) + strlen(argv[2]);
char mixed_string[len];
char *a = argv[1];
char *b = argv[2];
int i ;
for(i = 0; i < len;)
{
if(*a)
{
mixed_string[i++] = *a++;
}
if(*b)
{
mixed_string[i++] = *b++;
}
}
mixed_string[i] = '\0';
printf("%s\n", mixed_string);
return 0;
}
现在有点解释。新字符串的大小将是两个字符串的大小:
int total = strlen(argv[1]) + strlen(argv[2]);
char mixed_string[total];
我们在一个字符串和另一个字符串之间交替使用字符,而最小的字符串仍然包含要读取的字符:
for(i = 0; i < total;)
{
if(*a)
{
mixed[i++] = *a++;
}
if(*b)
{
mixed[i++] = *b++;
}
}
我真的不需要检查哪一个更小,当我检查指针是否指向有效的东西时,这是隐含的。
您可以通过传递两个字符串作为输入在命令行上运行它(我在这里使用Bash和GCC):
➜ ~/Code/C gcc -o test test.c
➜ ~/Code/C ./test First Second
FSiercsotnd
希望它有所帮助!
答案 2 :(得分:0)
int main()
{
char c1[]="Hello",c2[]="There",c3[11];
int i=0,j=0,k=0;
while(c1[i]!='\0' && c2[j]!='\0')
{
c3[k]=c1[i];
k++;
c3[k]=c2[j];
k++;
if(c1[i]!='\0')
i++;
if(c2[j]!='\0')
j++;
}
c3[k]='\0';
printf("%s\n",c3);
}
试试这个,它会工作