----------------------✨🎉🎈==!!!热烈欢迎各位大佬!!!==🎈🎉✨---------------------
🍹作者: BooleanChar12
✨博客主页: BooleanChar12的博客
💘很喜欢的一句话: Because we all stand on the shoulders of giants.
🥂如有bug和疑惑欢迎大家与我🤺
😍觉得博主文章写的不错的话,希望大家三连(🎉关注,🎉点赞,🎉评论),多多支持一下!!
--------------------------------------------------------------------------🍻==专栏回顾==🍻-------------------------------------------------------------------------------
☕Java(从入门到放弃) 🍉数据结构(从放弃到入门) 🍒Android开发(从入门到入土) 🍇计算机组成原理(从1到0) 🍑计算机网络(从上网到退网) 🥝操作系统(从0到0.1) 🍎C语言练习题 🏆Leetcode(狂刷笔记) 🌺微信小程序开发日记
1.文章概要📕:
🧡💛💚本篇文章将书上一带而过的顺序串的基本操作逐一实现,一文带你揭开数据结构之串的秘密🧡💛💚
2.代码实现💎:
# include <stdio.h>
# include <malloc.h>//使用malloc()函数必须引入的库
#define MAXSIZE 256 //定义顺序字符串的最大长度
#define OK 1 //定义返回状态码 return OK就是return 1 在函数正确执行完的时候用
#define ERROR 0 //定义返回状态码 return ERROR就是return 0
#define OVERFLOW -2 //定义返回状态码 return OVERFLOW就是return -2 在内存溢出的时候用
typedef char ElemType;//定义下面代码中出现的QElemType就是表示char
typedef int Status; //定义下面代码中出现的Status就是表示int
//顺序串的堆式结构体定义
typedef struct {
ElemType *ch;//串是由字符构成的,所以定义
int length;//串的长度
} SString;
//0.初始化串S
Status InitString(SString &S) {
S.ch=(char*)malloc(sizeof(char)*(MAXSIZE+1));//动态开辟一个大小为MAXSIZE+1的内存空间,因为第一个位置不放元素,而且要存放MAXSIZE个字符,所以实际大小应设置为MAXSIZE+1
if(S.length==0) {
//如果字符串S的长度为0,则提示用户初始化字符串S
printf("请输入你要初始化的串S:");
scanf("%s",&S.ch[1]);//为了字符串操作和字符匹配算法简便,字符串存储从下标为1的数组分量开始,0的分量空闲
int i = 1;//计数器,用于后面计算字符串的长度
while(S.ch[i]!='\0') {
i++;
}
S.length=i-1;//i从1开始的,所以字符串的长度为i-1
return OK;
}
//如果已被初始化,则给出提示
printf("当前串S已被初始化!");
return ERROR;
}
//1.生成一个其值等于chars的串T,返回值为SString类型
SString StrAssign(SString &T,char chars[]) {
T.ch=(char*)malloc(sizeof(char)*(MAXSIZE+1));//动态开辟一个大小为50+1的内存空间
if(T.length==0) {
int i = 0;//计数器,用于后面计算字符串的长度
while(chars[i]!='\0') {
//只要字符串没有扫描完
T.ch[i+1]=chars[i];//就将chars[i]的值赋给T.ch[i+1],+1是因为为了串操作简单,第一个位置不存字符
i++;
}
T.length=i;//i从0开始的,所以字符串的长度为i
printf("生成值等于chars的串成功!返回的字符串为:");
//遍历当前串
int l=1;
while(T.ch[l]!='\0') {
printf("%c",T.ch[l]);
l++;
}
printf("\n");
return T;
}
}
//2.由串S复制得串K,返回值为SString类型
SString StrCopy(SString &K,SString S) {
K.ch=(char*)malloc(sizeof(char)*(MAXSIZE+1));//动态开辟一个内存大小和串S内存一样大的内存空间
if(K.length==0) {
int i = 1;//计数器,用于后面计算字符串的长度
while(S.ch[i]!='\0') {
//只要字符串没有扫描完
K.ch[i]=S.ch[i];//就将S.ch[i]的值赋给K.ch[i]
i++;
}
K.length=S.length;//让串K的长度等于串S的长度
printf("复制串S成功!返回的字符串为:");
//遍历当前串
int l=1;
while(K.ch[l]