yexing 发表于 2020-4-1 22:35:42

关于实现 strcat 字符串拼接的问题

本帖最后由 yexing 于 2020-4-1 23:05 编辑

课后作业原题:
S1E22:指针和数组 | 课后测试题及答案
连接字符串 —— strcat 和 strncat 函数
使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来。

我的代码:
#include <stdio.h>

#define MAX 1024

int main()
{
        int i, j, k;
        char str1;
        char str2;
        char str3;
        char *pstr1 = str1;
        char *pstr2 = str2;
        char *pstr3 = str3;
       
        printf("请输入第一个字符串:");
        fgets(str1, MAX, stdin);
        printf("请输入第二个字符串:");
        fgets(str2, MAX, stdin);
       
        for (i = 0; *(pstr1+i) != '\0'; i++){;} //这个循环就是想获得 str1 的长度并存储到 i
        //*(pstr1+i) = ''; //想去掉'\0',但是报错
        //*(pstr1+i-1) = ''; //想去掉换行符,但是这两行报错,也求助一下大神该怎么解决
       
        for (j = 0; j < i; j++)
        {
                *(pstr3+j) = *(pstr1+j);
        }
        for (j = i-1, k = 0; *(pstr2+k) != '\0'; j++, k++)
        {
                *(pstr3+j) = *(pstr2+k);
        }
        *(pstr3+j) = '\0';
       
        printf("连接后的结果是:%s", str3);
       
        return 0;
}

运行结果:
请输入第一个字符串:ilove
请输入第二个字符串:fishc.com
连接后的结果是:ilovefishc.com

最后多出来几个H是怎么回事?(已解决)

还有一个问题,如果想去掉字符数组最后的换行符和 '\0' ,应该如何去掉?

yexing 发表于 2020-4-1 22:45:01

本帖最后由 yexing 于 2020-4-1 22:46 编辑

我知道了,忘了给 str3 加' \0' 了(捂脸),已修改代码
不过还是想问一下,如果想去掉字符数组最后的换行符和 '\0' ,应该如何去掉?

人造人 发表于 2020-4-1 23:39:23

yexing 发表于 2020-4-1 22:45
我知道了,忘了给 str3 加' \0' 了(捂脸),已修改代码
不过还是想问一下,如果想去掉字符数组最后的换行 ...

“去掉” 指的是什么?

yexing 发表于 2020-4-2 08:00:36

人造人 发表于 2020-4-1 23:39
“去掉” 指的是什么?

我的意思是转换为空元素,也就是未初始化,不知道可不可行

lovely539351 发表于 2020-4-2 12:37:56

我也刚做了这道题
我是思路是先找到第一个数组中的\0第一个数组最开始初始化为\0
然后把要拼接的数组从找到的\0处开始赋值
下面是只把第二个数组前LIM个字符接到第一个数组后面第一个数组大小是n
char * mystrncpy(char * st1, char * st2, int n)
{
        int m, i = 0, j = 0;
        while (st1 != '\0')
                i++;
        if (st2 && i < n)
        {
                while (st2 != '\n' && st2 != '\0')
                        j++;
                if (st2 == '\n')
                        st2 = '\0';
                j = LIM < j ? LIM : j;
                for (m = 0; m < j && i < n; m++, i++)
                        st1 = st2;
        }
        if (i >= n)
        {
                st1 = '\0';
                printf("内容已满\n");
        }
        return st1;
}

人造人 发表于 2020-4-2 12:56:21

yexing 发表于 2020-4-2 08:00
我的意思是转换为空元素,也就是未初始化,不知道可不可行

不行,必须要有一个值

yexing 发表于 2020-4-2 13:27:39

人造人 发表于 2020-4-2 12:56
不行,必须要有一个值

明白了,谢谢
页: [1]
查看完整版本: 关于实现 strcat 字符串拼接的问题