鱼C论坛

 找回密码
 立即注册
查看: 316|回复: 2

[已解决]串相关

[复制链接]
发表于 2023-11-5 10:28:37 | 显示全部楼层 |阅读模式

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

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

x
用顺序存储结构解决串的赋值和输出问题
已写部分代码,求帮忙看看哪错了
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define OK 1
  5. #define ERROR 0
  6. #define MAXSTRLEN 255
  7. typedef unsigned char sstring[MAXSTRLEN + 1];
  8. typedef int status;
  9. status strassign(sstring &s,char *char1)
  10. {
  11.         int i;
  12.         if (strlen(char1) > MAXSTRLEN)  return ERROR;
  13.         s[0]=strlen(char1);
  14.         for(i=1;i<=s[0];i++){
  15.                 s[i]=*(char1+i-1);
  16.                 return OK;
  17.         }
  18. }
  19. void strprint(sstring s)
  20. {
  21.         int i;
  22.         for(i=1;i<=s[0];i++){
  23.                 printf("%c",s[i]);
  24.         }
  25.         printf("\n");
  26. }
  27. int main()
  28. {
  29.         char *char1="rgh",*char2="asdefrghyr";
  30.         sstring s,t;
  31.         printf("%s\n",char1);
  32.         strassign(s,char1);
  33.         strassign(t,char2);
  34.         strprint(s);
  35.         strprint(t);
  36. }
复制代码
最佳答案
2023-11-5 10:28:48
代码中有两个问题:

1. 在函数 strassign 中, return OK 语句放在了循环内部,导致循环只会执行一次就返回。应该将 return OK 语句放在循环外部。

2. 在函数 strassign 中,应该将字符串的长度赋值给 s[0] ,而不是将字符串的长度赋值给 s[0]+1 。因此,应该将 s[0]=strlen(char1) 改为 s[0]=strlen(char1)+1 。

以下是修改后的代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define OK 1
  5. #define ERROR 0
  6. #define MAXSTRLEN 255

  7. typedef unsigned char sstring[MAXSTRLEN + 1];
  8. typedef int status;

  9. status strassign(sstring &s, char *char1)
  10. {
  11.     int i;
  12.     if (strlen(char1) > MAXSTRLEN)
  13.         return ERROR;
  14.     s[0] = strlen(char1) + 1;
  15.     for (i = 1; i <= s[0]; i++)
  16.     {
  17.         s[ i] = *(char1 + i - 1);
  18.     }
  19.     return OK;
  20. }

  21. void strprint(sstring s)
  22. {
  23.     int i;
  24.     for (i = 1; i <= s[0]; i++)
  25.     {
  26.         printf("%c", s[ i]);
  27.     }
  28.     printf("\n");
  29. }

  30. int main()
  31. {
  32.     char *char1 = "rgh", *char2 = "asdefrghyr";
  33.     sstring s, t;
  34.     printf("%s\n", char1);
  35.     strassign(s, char1);
  36.     strassign(t, char2);
  37.     strprint(s);
  38.     strprint(t);
  39.     return 0;
  40. }
复制代码


希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-5 10:28:48 | 显示全部楼层    本楼为最佳答案   
代码中有两个问题:

1. 在函数 strassign 中, return OK 语句放在了循环内部,导致循环只会执行一次就返回。应该将 return OK 语句放在循环外部。

2. 在函数 strassign 中,应该将字符串的长度赋值给 s[0] ,而不是将字符串的长度赋值给 s[0]+1 。因此,应该将 s[0]=strlen(char1) 改为 s[0]=strlen(char1)+1 。

以下是修改后的代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define OK 1
  5. #define ERROR 0
  6. #define MAXSTRLEN 255

  7. typedef unsigned char sstring[MAXSTRLEN + 1];
  8. typedef int status;

  9. status strassign(sstring &s, char *char1)
  10. {
  11.     int i;
  12.     if (strlen(char1) > MAXSTRLEN)
  13.         return ERROR;
  14.     s[0] = strlen(char1) + 1;
  15.     for (i = 1; i <= s[0]; i++)
  16.     {
  17.         s[ i] = *(char1 + i - 1);
  18.     }
  19.     return OK;
  20. }

  21. void strprint(sstring s)
  22. {
  23.     int i;
  24.     for (i = 1; i <= s[0]; i++)
  25.     {
  26.         printf("%c", s[ i]);
  27.     }
  28.     printf("\n");
  29. }

  30. int main()
  31. {
  32.     char *char1 = "rgh", *char2 = "asdefrghyr";
  33.     sstring s, t;
  34.     printf("%s\n", char1);
  35.     strassign(s, char1);
  36.     strassign(t, char2);
  37.     strprint(s);
  38.     strprint(t);
  39.     return 0;
  40. }
复制代码


希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-5 10:29:59 | 显示全部楼层
使用顺序存储结构解决串的赋值和输出问题 - C代码

根据你提供的代码,有一些问题需要修正:

1. 在strassign函数中,应该将return OK;放在for循环之外,以确保完成整个字符串的复制操作后再返回成功标志。

2. 在strprint函数中,应该使用%c格式化字符的输出,而不是%s

以下是修改后的代码:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define OK 1
  5. #define ERROR 0
  6. #define MAXSTRLEN 255
  7. typedef unsigned char sstring[MAXSTRLEN + 1];
  8. typedef int status;
  9. status strassign(sstring& s, char* char1) {
  10.     int i;
  11.     if (strlen(char1) > MAXSTRLEN)
  12.         return ERROR;
  13.     s[0] = strlen(char1);
  14.     for (i = 1; i <= s[0]; i++) {
  15.         s[i] = *(char1 + i - 1);
  16.     }
  17.     return OK;
  18. }
  19. void strprint(sstring s) {
  20.     int i;
  21.     for (i = 1; i <= s[0]; i++) {
  22.         printf("%c", s[i]);
  23.     }
  24.     printf("\n");
  25. }
  26. int main() {
  27.     char* char1 = "rgh";
  28.     char* char2 = "asdefrghyr";
  29.     sstring s, t;
  30.     printf("%s\n", char1);
  31.     strassign(s, char1);
  32.     strassign(t, char2);
  33.     strprint(s);
  34.     strprint(t);
  35.     return 0;
  36. }
复制代码

希望以上修改能够解决你的问题。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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