8898. 2021-10-31 16:37 采纳率: 100%
浏览 53
已结题

求指点数据结构串操作问题

数据结构自学者一枚,在编译串操作实验指导时无法写出完整代码。
#运行结果不正确
#主函数错误较多

#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
SString S;
typedef int Status;
typedef struct {
    char *ch;
    int length;
} HString;
/*void Init_String(HString *T) {
    *T=(char*)malloc()
    T->ch = NULL;
    T->length = 0;
}*/
Status StrEmpty(HString &T)
{
    if(T.length==0&&T.ch==NULL)
        return true;
    else 
        return false;
}
void StrPrint(HString S)
{
    int i;
    if(StrEmpty(S))
        printf("S为空串,不可输出!");
    for(i=0;i<S.length;i++)
        printf("%c",S.ch[i]); 
    printf("\n");
}
Status StrInsert(HString &S, int pos, HString T) {
    int i;
    if (pos < 1 || pos > S.length + 1)
        return ERROR;
    if (T.length) {
        if (!(S.ch = (char*)realloc(S.ch, (S.length + T.length) * sizeof(char))))
            exit(OVERFLOW);
        for (i = S.length - 1; i >= pos - 1; --i)
            S.ch[i + T.length] = S.ch[i];
        for (i = 0; i < T.length; i++)
            S.ch[pos - 1 + i] = T.ch[i];
        S.length += T.length;
    }
    return OK;
}
Status StrAssign(HString &T, char *chars) {
    int i, j;
    char *c;
    if (T.ch) free(T.ch);
    for (i = 0, c = chars; *c; ++i, ++c);
    if (!i) {
        T.ch = NULL;
        T.length = 0;
    } else {
        if (!(T.ch = (char*)malloc(i * sizeof(char))))
            exit(OVERFLOW);
        for (j = 0; j < i; j++)
            T.ch[i] = chars[j];
        T.length = i;
    }
}
int StrCompare(HString S, HString T) {
    int i;
    for (i = 0; i < S.length && i < T.length; ++i) {
        if (S.ch[i] != T.ch[i])
            return S.ch[i] - T.ch[i];
        return S.length - T.length;
    }
}
Status Concat(HString &T, HString S1, HString S2) {
    int i;
    if (T.ch) free(T.ch);
    if (!(T.ch = (char*)malloc((S1.length + S2.length) * sizeof(char))))
        exit(OVERFLOW);
    for (i = 0; i < S1.length; i++)
        T.ch[i] = S1.ch[i];
    for (i = 0; i < S2.length; i++)
        T.ch[S1.length + i] = S2.ch[i];
    return OK;
}
Status SubString(HString &Sub, HString S, int pos, int len) {
    int i;
    //Init_String(&Sub);
    if (pos < 1 || pos > S.length || len < 0 || len > S.length - pos + 1)
        return ERROR;
    if (Sub.ch) free(Sub.ch);
    if (!len) {
        Sub.ch = NULL;
        Sub.length = 0;
    } else {
        Sub.ch = (char*)malloc(len * sizeof(char));
        if (!Sub.ch)
            exit(OVERFLOW);
        for (i = 0; i <= len - 1; i++)
            Sub.ch[i] = S.ch[pos - 1 + i];
        Sub.length = len;
    }
    return OK;
}
int StrIndex(SString S,SString T,int pos){
    int i,j;
    i=pos;j=1;
    while(i<S[0]&&j<=T[0]){
        if(S[i]==T[j]){
            ++i;
            ++j;
        }else{
            i=i-j+2;
            j=1;
        }
    }
    if(j>T[0])
        return i-T[0];
    else
        return 0;
}
int main(){
    int pos;
    HString S,T,V;
    char s[MAXSTRLEN];
    char t[MAXSTRLEN];
    /*Init_String(&S);
    Init_String(&T);
    Init_String(&V);*/
    printf("***************串操作实验***************\n");
    printf("请输入主串S:\n");
    gets(s);
    StrAssign(S,s);
    printf("请输入子串T:\n");
    gets(t);
    StrAssign(T,t);
    printf("第一个串为:%s\n",S.ch);
    return 0;
}

img

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-10-31 19:07
    关注

    HString变量都没有初始化处理,length和ch指针都是野值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000