博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四章 串的基本操作【数据结构】
阅读量:4668 次
发布时间:2019-06-09

本文共 3771 字,大约阅读时间需要 12 分钟。

运行截图。

自己太久没有这样用过指针了,总是用不好~~

下次自己申请了一个指针,就得初始化,不然在判断是否为空的操作下,会导致程序停止运行。(传说中的敲代码5分钟,debug2小时又被我碰上了,泪目)。

 

#include
#include
#include
#include
#define ERROR 0#define OK 1#define MAXSIZE 1000typedef int Status;//------串的堆存储表示-------- typedef struct{ char *ch;//若是非空串,则按串长分配存储区,否则ch为NULL int length;//串长度 }HString;//--------------------------------------基本操作的算法描述--------------------- //生成一个其值等于串常量chars的串T Status StrAssign(HString *T,char *chars){ int i,j; char *c; if(T->ch) free(T->ch);//释放T原有的存储空间 for(i = 0,c = chars;*c; c++,i++);//求chars串的长度 if(!i) { T->ch = NULL; T->length = 0; } else { T->ch = (char*)malloc(i*sizeof(char)); if(!T->ch) exit(0); j = 0; while(j < i) { T->ch[j] = chars[j++]; } T->length = i; } return OK;}//返回串S的长度int StrLength(HString S) { return S.length;}//若S>T,返回值>0;若S==T,返回值=0;若S
<0 int StrCompare(HString S,HString T){ for(int 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 ;}//用T返回由s1和s2连接而成的新串Status Contact(HString &T,HString s1,HString s2){ if(T.ch) free(T.ch);//释放旧空间 } //清空串S Status ClearString(HString &S){ if(S.ch) { free(S.ch); S.ch = NULL; } S.length = 0; return OK;}//连接串s1和串s2,用T返回 Status Concat(HString &T,HString s1,HString s2){ int i = 0,j; if(T.ch) free(T.ch);//释放旧空间 T.ch = (char*)malloc((s1.length + s2.length )*sizeof(char)); if(!T.ch) exit(0); while(i < s1.length) { T.ch[i] = s1.ch[i++]; } T.length = s1.length + s2.length ; j = 0; while(j < s2.length) { T.ch [i++] = s2.ch[j++]; } return OK;}//返回串s的第pos个字符起长度为len的子串Status SubString(HString &sub,HString s,int pos,int len){ int i = 0; if(pos < 1||pos > s.length || len < 0||len > s.length -1) return ERROR; if(sub.ch) free(sub.ch); if(!len)//空子串 { sub.ch = NULL; sub.ch = 0; } else//完整子串 { sub.ch = (char*)malloc(len*sizeof(char)); while(i < len) { sub.ch[i] = s.ch[pos+i-1]; i++; } sub.length = len; } return OK;} //在S串的第pos个字符前插入串T Status StrInsert(HString &S,int pos,HString T){ if(pos < 0||pos > S.length-1)//pos 不合法 return ERROR; if(T.length)//T非空,则重新分配存储空间,插入T { S.ch = (char*)realloc(S.ch, (S.length + T.length)*sizeof(char)); if(!S.ch) exit(0); for(int i = S.length-1; i >= pos-1;i--)//为插入T 腾出位置 S.ch[i+T.length] = S.ch[i]; for(int i = 0; i < T.length ; i ++)//插入T S.ch[i+pos-1] = T.ch[i]; S.length += T.length ; S.ch[S.length] = '\0'; } return OK;}int main(){ char s1[MAXSIZE],s2[MAXSIZE]; HString SS,T,sub,S1,S2; int flag,pos,len; printf("请输入串S1和串S2\n"); while(scanf("%s %s",s1,s2),s1[0]!='#'&&s2[0]!='#') { T.ch = SS.ch = NULL; StrAssign(&SS,s1);//创建串T StrAssign(&T,s2); //创建串S printf("S串为:\n"); for(int i = 0;SS.ch[i]!='\0';i++) printf("%c",SS.ch[i]); printf("\n"); printf("T串为:\n"); for(int i = 0; T.ch[i]!='\0';i ++) printf("%c",T.ch[i]); printf("\n\n"); printf("S串的长度为%d\n\n",StrLength(SS)); flag = StrCompare(SS,T);//比较两串 if(flag > 0) printf("S串>T串\n\n"); else if(flag == 0) printf("S串=T串\n\n"); else printf("S串

 

转载于:https://www.cnblogs.com/hellocheng/p/7799601.html

你可能感兴趣的文章
5.6 在线DDL (online DDL)详解
查看>>
电容计算公式
查看>>
vue阿里上传图片报400错误
查看>>
Python基础之函数
查看>>
课堂练习--单元测试
查看>>
嵌入式 探讨父子线程、进程终止顺序不同产生的结果_skdkjxy_新浪博客
查看>>
【机器学习】如何成为当下合格的算法工程师
查看>>
vuex 学习总结及demo
查看>>
MySQL高可用架构故障自动转移插件MHA
查看>>
lnmp之nginx1.10.2安装
查看>>
recv send 阻塞和非阻塞
查看>>
网络丢包分析
查看>>
打印LIS
查看>>
剑指offer第2章学习(2)
查看>>
java后台验证码的生成
查看>>
Bootstrap辅助类
查看>>
vue项目的骨架及常用组件介绍
查看>>
Spring使用外部的配置文件
查看>>
ctype
查看>>
jsp 修饰 Request 及Response
查看>>