鱼C论坛

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

为什么我的substr不对??

[复制链接]
发表于 2018-4-16 09:39:41 | 显示全部楼层 |阅读模式

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

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

x
  1. # include <stdio.h>
  2. # include <string.h>
  3. # define MAXSIZE 100
  4. typedef struct{
  5.         char *ch;
  6.         int length;
  7. }HString;

  8. int initstr(HString *str)
  9. {
  10.         str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
  11.         if(!str->ch)
  12.         {
  13.                 printf("存储空间分配失败。\n");
  14.                 return -1;
  15.         }
  16.        
  17.         printf("请给字符串str赋值:");
  18.         gets(str->ch);
  19.         str->length=strlen(str->ch);
  20.         printf("该字符串的长度为:%d\n",str->length);
  21.         printf("赋值成功\n");
  22.         return 0;
  23. }
  24. /*int initstr(HString *str)
  25. {
  26.         char str2[MAXSIZE];

  27.         str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
  28.         if(!str->ch)
  29.         {
  30.                 printf("存储空间分配失败。\n");
  31.                 return -1;
  32.         }

  33.         printf("请输入字符串str2:");
  34.         gets(str2);
  35.         strcpy(str->ch,str2);
  36.         printf("赋值成功。\n");
  37.         return 0;
  38. }*/

  39. /*int initstr(HString *str)
  40. {
  41.         char *str2;
  42.         str2=(char*)(malloc(sizeof(char)*MAXSIZE));

  43.         str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
  44.         if(!str->ch)
  45.         {
  46.                 printf("存储空间分配失败。\n");
  47.                 return -1;
  48.         }

  49.         printf("请输入字符串str2:");
  50.         gets(str2);
  51.         strcpy(str->ch,str2);
  52.         printf("赋值成功。\n");
  53.         return 0;
  54. }*/

  55. int lengthstr(HString str) //求串长
  56. {
  57.         printf("您的字符串长度为%d\n",str.length);
  58.         return str.length;
  59. }


  60. void printstr(HString *str) //打印字符串
  61. {
  62.         printf("您所需要打印的字符串为:%s\n",str->ch);
  63.         //printf("您所需要打印的字符为:%s\n",str->ch+2);
  64.         //printf("您所需要打印的字符为:%s\n",&str->ch[i]);

  65. }

  66. int comparestr(HString *str1,HString *str2)
  67. {
  68.         int i;
  69.         for(i=0;i<str1->length&&i<str2->length;i++)
  70.         {
  71.                 if(str1->ch[i]!=str2->ch[i])
  72.                 {
  73.                         printf("两者相差%d\n",str1->ch[i]-str2->ch[i]);
  74.                         return 1;
  75.                 }
  76.                 else
  77.                 {
  78.                         printf("两者相等。\n");
  79.                         return 0;
  80.                 }
  81.         }
  82. }

  83. void copystr(HString *str1,HString *str2)
  84. {
  85.         int i=0;
  86.         while(i<=str2->length)
  87.         {
  88.                 str1->ch[i]=str2->ch[i];
  89.                 i++;
  90.         }
  91. }

  92. void concatstr(HString *str1,HString *str2)
  93. {
  94.         int i,j;
  95.         i=0;
  96.         j=str1->length;
  97.         while(i<=str2->length)
  98.         {
  99.                 str1->ch[j]=str2->ch[i];
  100.                 i++;
  101.                 j++;
  102.         }
  103.         printf("字符串连接成功.\n");
  104. }

  105. int lenstr(HString *str)
  106. {
  107.         int i=0,len=0;
  108.         while(str->ch[i]!='\0')
  109.         {
  110.                 len++;
  111.                 i++;
  112.         }
  113.         printf("该字符串的长度为%d\n",len);
  114.         return 0;
  115. }

  116. void substr(HString *str)
  117. {
  118.         int pos,len,i,j;
  119.         HString *strsub;
  120.         printf("请输入寻找子串的起始位置:");
  121.         scanf("%d",&pos);
  122.         printf("请输入寻找子串的长度:");
  123.         scanf("%d",&len);
  124.         if(pos<1||pos>str->length||len>=str->length)
  125.                 printf("data error!");
  126.         else
  127.         {
  128.                 for(i=pos;i<pos+len;i++)
  129.                 {
  130.                         strsub->ch[i-pos]=str->ch[i];
  131.                 }
  132.                 strsub->ch[i]='\0';
  133.                 strsub->length=len;
  134.                 printf("您所需要查询的子串为:%s",strsub->ch);
  135.         }
  136. }









  137. int main()
  138. {
  139.         HString str1,str2;
  140.         initstr(&str1);
  141.         //initstr(&str2);
  142.         //comparestr(&str1,&str2);
  143.         //copystr(&str1,&str2);
  144.         //lengthstr(str1);
  145.         //concatstr(&str1,&str2);
  146.         lenstr(&str1);
  147.         substr(&str1);
  148.         printstr(&str1);
  149.         return 0;
  150. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-16 10:20:10 | 显示全部楼层
错误提示?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-16 10:26:26 | 显示全部楼层

没有错误提示,可以执行一下,然后直接跳出程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-16 11:01:57 | 显示全部楼层
愿你 发表于 2018-4-16 10:26
没有错误提示,可以执行一下,然后直接跳出程序

那你怎么知道你的不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-16 11:49:49 | 显示全部楼层
BngThea 发表于 2018-4-16 11:01
那你怎么知道你的不对?

因为没执行完就退出来了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-16 11:51:41 | 显示全部楼层
愿你 发表于 2018-4-16 11:49
因为没执行完就退出来了啊

那你就设置断点追踪一下,看执行到哪一步跳出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-16 11:58:42 | 显示全部楼层
BngThea 发表于 2018-4-16 11:51
那你就设置断点追踪一下,看执行到哪一步跳出来的

我现在就在学怎么调试...
有点难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-21 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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