C程序 - 如何将2个字符串集成到一起?

时间:2016-03-25 16:12:48

标签: c

我知道这是一个令人困惑的标题,但基本上我的字符串是"你好"和string2是"那里"

我需要创建一个混合的第三个字符串,如: H t e h l e l r o e(加粗以便您可以更好地看到它)。

我是C的新手,说实话,我甚至不确定如何开始这样做。我知道肯定应该有一个for循环可能有类似string1 [i-1]!=' \ 0'在中间。非常感激您的帮忙!

3 个答案:

答案 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);

}

试试这个,它会工作