kunkundebasketba 2022-08-04 09:51 采纳率: 64.3%
浏览 20
已结题

实际输出的结果一直都是错误的,甚至b.ch数组是乱码

#include<stdio.h>
#define max 10
typedef struct
{
char ch[max];
int length;
}sstring;
int substring(sstring &sub,sstring s,int pos,int length)
{
int i;
if(pos+length-1>s.length)
return -1;
for(i=pos;i<pos+length;i++)
sub.ch[i-pos+1]=s.ch[i];
sub.length=length;
return 1;
}

int main()
{
sstring a;
sstring b;
gets(a.ch);
printf("%d\n",substring(b,a,3,2));
puts(b.ch);
return 0;
}

  • 写回答

2条回答 默认 最新

  • a5156520 2022-08-04 10:42
    关注

    如果是要求实现的功能是:求子串。用Sub返回串S的第pos个字符起长度为len的子串。那代码需要修改一下,下面的例子将substring函数第二个参数结构a的字符数组的第3个元素起的2个字符的子串存储到第一个参数b的字符数组ch中,但不知道是不是你所问的那个要求,代码修改如下:

    #include <stdio.h> 
    #include <string.h>
    #define max 10
    typedef struct
    {
        char ch[max];
        int length;
    }sstring;
    
    int substring(sstring &sub,sstring s,int pos,int length)
    {
        int i;
        if(pos+length-1>s.length)
            return -1;
            
        for(i=pos;i<pos+length;i++)
            sub.ch[i-pos]=s.ch[i]; //sub结构的ch字符数组的第0个位置开始存储s结构的ch数组第pos位置的元素,往后依次存储length个元素 
        sub.ch[i-pos]='\0';     //sub结构的ch字符数组后面增加空字符,形成一个字符串 
        sub.length=length;
        
        return 1;
    }
    //https://ask.csdn.net/questions/7767563?spm=1005.2025.3001.5141
    int main()
    {
        sstring a;
        
        gets(a.ch);
        a.length=strlen(a.ch); 
        
        sstring b;
        printf("%d\n",substring(b,a,3,2));
        puts(b.ch);
        
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月12日
  • 已采纳回答 10月4日
  • 创建了问题 8月4日

悬赏问题

  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了