鱼C论坛

 找回密码
 立即注册
查看: 899|回复: 6

[已解决]关于实现 strcat 字符串拼接的问题

[复制链接]
发表于 2020-4-1 22:35:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

课后作业原题:
S1E22:指针和数组 | 课后测试题及答案

连接字符串 —— strcat 和 strncat 函数
使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来。

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

  2. #define MAX 1024

  3. int main()
  4. {
  5.         int i, j, k;
  6.         char str1[MAX];
  7.         char str2[MAX];
  8.         char str3[MAX];
  9.         char *pstr1 = str1;
  10.         char *pstr2 = str2;
  11.         char *pstr3 = str3;
  12.        
  13.         printf("请输入第一个字符串:");
  14.         fgets(str1, MAX, stdin);
  15.         printf("请输入第二个字符串:");
  16.         fgets(str2, MAX, stdin);
  17.        
  18.         for (i = 0; *(pstr1+i) != '\0'; i++){;} //这个循环就是想获得 str1 的长度并存储到 i
  19.         //*(pstr1+i) = ''; //想去掉'\0',但是报错
  20.         //*(pstr1+i-1) = ''; //想去掉换行符,但是这两行报错,也求助一下大神该怎么解决
  21.        
  22.         for (j = 0; j < i; j++)
  23.         {
  24.                 *(pstr3+j) = *(pstr1+j);
  25.         }
  26.         for (j = i-1, k = 0; *(pstr2+k) != '\0'; j++, k++)
  27.         {
  28.                 *(pstr3+j) = *(pstr2+k);
  29.         }
  30.         *(pstr3+j) = '\0';
  31.        
  32.         printf("连接后的结果是:%s", str3);
  33.        
  34.         return 0;
  35. }
复制代码


运行结果:
  1. 请输入第一个字符串:ilove
  2. 请输入第二个字符串:fishc.com
  3. 连接后的结果是:ilovefishc.com
复制代码

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

还有一个问题,如果想去掉字符数组最后的换行符和 '\0' ,应该如何去掉?
最佳答案
2020-4-2 12:56:21
yexing 发表于 2020-4-2 08:00
我的意思是转换为空元素,也就是未初始化,不知道可不可行

不行,必须要有一个值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-1 22:45:01 | 显示全部楼层
本帖最后由 yexing 于 2020-4-1 22:46 编辑

我知道了,忘了给 str3 加' \0' 了(捂脸),已修改代码
不过还是想问一下,如果想去掉字符数组最后的换行符和 '\0' ,应该如何去掉?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

“去掉” 指的是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-2 08:00:36 | 显示全部楼层
人造人 发表于 2020-4-1 23:39
“去掉” 指的是什么?

我的意思是转换为空元素,也就是未初始化,不知道可不可行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 12:37:56 | 显示全部楼层
我也刚做了这道题
我是思路是先找到第一个数组中的\0  第一个数组最开始初始化为\0
然后把要拼接的数组从找到的\0处开始赋值
下面是只把第二个数组前LIM个字符接到第一个数组后面第一个数组大小是n
  1. char * mystrncpy(char * st1, char * st2, int n)
  2. {
  3.         int m, i = 0, j = 0;
  4.         while (st1[i] != '\0')
  5.                 i++;
  6.         if (st2 && i < n)
  7.         {
  8.                 while (st2[j] != '\n' && st2[j] != '\0')
  9.                         j++;
  10.                 if (st2[j] == '\n')
  11.                         st2[j] = '\0';
  12.                 j = LIM < j ? LIM : j;
  13.                 for (m = 0; m < j && i < n; m++, i++)
  14.                         st1[i] = st2[m];
  15.         }
  16.         if (i >= n)
  17.         {
  18.                 st1[SIZE -1] = '\0';
  19.                 printf("内容已满\n");
  20.         }
  21.         return st1;
  22. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 12:56:21 | 显示全部楼层    本楼为最佳答案   
yexing 发表于 2020-4-2 08:00
我的意思是转换为空元素,也就是未初始化,不知道可不可行

不行,必须要有一个值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-2 13:27:39 | 显示全部楼层
人造人 发表于 2020-4-2 12:56
不行,必须要有一个值

明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 11:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表