用C语言从键盘上输入2个字符串s1和s2,然后将两个字符串连接起来输出。要求不能使用strcat()函数。

从键盘上输入2个字符串s1和s2,然后将两个字符串连接起来输出。要求不能使用strcat()函数。


#include <stdio.h>
#include <stdlib.h>

int main() {
    char s1[100], s2[100];
    int i, j;

    printf("请输入第一个字符串:");
    fgets(s1, 100, stdin);  // 从输入流中读取第一个字符串

    printf("请输入第二个字符串:");
    fgets(s2, 100, stdin);  // 从输入流中读取第二个字符串

    // 找到s1的末尾
    for (i = 0; s1[i] != '\0'; ++i);

    // 拼接s2到s1后面
    for (j = 0; s2[j] != '\0'; ++j, ++i) {
        s1[i] = s2[j];
    }

    s1[i] = '\0';   // 在连接的字符串末尾添加字符串结束符

    printf("连接后的字符串为:%s", s1);  // 输出连接后的字符串

    return 0;
}

用scanf输入到字符型的数组里,然后直接输出可否?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7738953
  • 除此之外, 这篇博客: C语言编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2中的 strcat函数方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    strcat(A,B),把B串连接到A串后面,A的值变成连接后的样子

    • A串要足够大

    代码如下

    int main(void)
    {
        char s1[1000] = {0};
        char s2[1000] = {0};
        int n; char c;
        scanf("%d", &n);//输入要插入的位置
        c = getchar();//消除回车符号
        gets_s(s1);
        gets_s(s2);
        char x[100] = {0};//s1后面的部分
        char y[100] = { 0 };
        for (int i = n, j = 0;i<strlen(s1); i++, j++)
        {
            x[j] = s1[i];//s1后面的部分
        }
        //printf("输出s1后面的部分为:%s\n", x);//输出s1后面的部分
        for (int i = 0,j=0; i < n; i++,j++)
        {
            y[j]=s1[i];
        }
        //printf("s1的前面部分为:%s", y);
        strcat(y, s2);
        strcat(y, x);
        printf("%s", y);
            return 0;
    }
    
  • 以下回答来自chatgpt:

    可以使用指针来完成字符串的拼接,具体步骤如下:

    1.定义两个字符数组,分别存储输入的两个字符串;

    2.定义一个字符数组,作为拼接结果;

    3.定义两个指针变量,分别指向拼接结果数组和第一个输入字符串;

    4.将第一个输入字符串依次拷贝到拼接结果数组中;

    5.将第二个输入字符串依次拷贝到拼接结果数组中,注意此时要拷贝到第一个字符串结束的位置;

    6.输出拼接结果数组。

    代码如下:

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char s1[100], s2[100], result[200];
        printf("Please input the first string: ");
        scanf("%s", s1);
        printf("Please input the second string: ");
        scanf("%s", s2);
        char* p = result, *q = s1;
        while (*q != '\0') {
            *p++ = *q++;
        }
        q = s2;
        while (*q != '\0') {
            *p++ = *q++;
        }
        *p = '\0';
        printf("The result is: %s", result);
        return 0;
    }
    

    这里采用两个指针变量,一个指向拼接结果数组,一个指向第一个输入字符串,可以通过指针运算实现字符的拷贝,避免了使用strcat()函数的限制。同时,拼接结果数组可以预先定义足够的长度,避免内存空间的非法使用。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^