鱼C论坛

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

为什么我的substr不对??

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

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

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

x
# include <stdio.h>
# include <string.h>
# define MAXSIZE 100
typedef struct{
        char *ch;
        int length;
}HString;

int initstr(HString *str)
{
        str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
        if(!str->ch)
        {
                printf("存储空间分配失败。\n");
                return -1;
        }
        
        printf("请给字符串str赋值:");
        gets(str->ch);
        str->length=strlen(str->ch);
        printf("该字符串的长度为:%d\n",str->length);
        printf("赋值成功\n");
        return 0;
}
/*int initstr(HString *str)
{
        char str2[MAXSIZE];

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

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

/*int initstr(HString *str)
{
        char *str2;
        str2=(char*)(malloc(sizeof(char)*MAXSIZE));

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

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

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


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

}

int comparestr(HString *str1,HString *str2)
{
        int i;
        for(i=0;i<str1->length&&i<str2->length;i++)
        {
                if(str1->ch[i]!=str2->ch[i])
                {
                        printf("两者相差%d\n",str1->ch[i]-str2->ch[i]);
                        return 1;
                }
                else
                {
                        printf("两者相等。\n");
                        return 0;
                }
        }
}

void copystr(HString *str1,HString *str2)
{
        int i=0;
        while(i<=str2->length)
        {
                str1->ch[i]=str2->ch[i];
                i++;
        }
}

void concatstr(HString *str1,HString *str2)
{
        int i,j;
        i=0;
        j=str1->length;
        while(i<=str2->length)
        {
                str1->ch[j]=str2->ch[i];
                i++;
                j++;
        }
        printf("字符串连接成功.\n");
}

int lenstr(HString *str)
{
        int i=0,len=0;
        while(str->ch[i]!='\0')
        {
                len++;
                i++;
        }
        printf("该字符串的长度为%d\n",len);
        return 0;
}

void substr(HString *str)
{
        int pos,len,i,j;
        HString *strsub;
        printf("请输入寻找子串的起始位置:");
        scanf("%d",&pos);
        printf("请输入寻找子串的长度:");
        scanf("%d",&len);
        if(pos<1||pos>str->length||len>=str->length)
                printf("data error!");
        else
        {
                for(i=pos;i<pos+len;i++)
                {
                        strsub->ch[i-pos]=str->ch[i];
                }
                strsub->ch[i]='\0';
                strsub->length=len;
                printf("您所需要查询的子串为:%s",strsub->ch);
        }
}









int main()
{
        HString str1,str2;
        initstr(&str1);
        //initstr(&str2);
        //comparestr(&str1,&str2);
        //copystr(&str1,&str2);
        //lengthstr(str1);
        //concatstr(&str1,&str2);
        lenstr(&str1);
        substr(&str1);
        printstr(&str1);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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-12-24 21:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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