C语言|C语言 数据结构与算法之字符串详解
目录
- 串的定义
- 串的比较
- 串的抽象数据类型
- 串的初始化
- 相关定义初始化
- 定长类初始化
- 串的堆式顺序存储结构(Heap)
- 初始化堆字符串
- 赋值操作
- 比较两个堆字符串的大小
串的定义 零个或多个字符组成的有限序列
文章图片
文章图片
串的比较 串的比较实际上是在比较串中字符的编码
存在某个k < min(n,m),使得ai = bi (i = 1,2,3,4..k)
如果 ak < bk-->那么srt1 < srt2 (反之也成立)
除去相等的字符,在第一个不相等的字符位置以Ascii码进行比较
串的抽象数据类型
文章图片
串的顺序存储结构示意图
文章图片
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列
文章图片
typedef struct sqString{char* ch; //若串为空,则按串长分配存储区//否则ch = NULLint length; //串长}sqString;
串的初始化
相关定义初始化
文章图片
/** 状态码**/#define TRUE 1#define FALSE 0#define EQ 0#define GT 1//大于#define LT -1 //小于
定长类初始化
文章图片
#define MAX_SIZE 1024typedef struct{char ch[MAX_SIZE + 1]; //定长方式实现了字符串的顺序结构--缺点是浪费空间int length; }SString;
串的堆式顺序存储结构(Heap)
文章图片
/** 串的堆式顺序存储结构(Heap)**/typedef struct{char * ch; //如果是非空串,那么就按照指定长度分配内存,否则ch就指向NULLint length; //串当前长度}HString;
初始化堆字符串
赋值操作
/** 为串str赋值,值为字符串常量chars **/void StrAssign_HeapString(HString * str,char * chars){int len = strlen(chars); if(!len) return ERROR; InitString_HeapString(str); //动态为字符串分配空间str->ch = (char*)malloc(len * sizeof(char)); if(!str->ch){exit(OVERFLOW); //内存溢出,分配失败}//逐个将字符串输入所分配的空间中for(int i = 0; i < len ; i++){str->ch[i] = chars[i]; }str->length = len; //将长度赋值return OK; }
比较两个堆字符串的大小
str1 == str2 返回0 ; str1 < str2 返回-1 ; str1 > str2 返回1
Status Strcmp_HeapString(HString * str1,HString * str2){for(int i = 0; i < str->length && i < str2->length; i ++){//遇到不同的字符就直接比较Asciiif(str->ch[i] != str[2]->ch[i]){//大于则返回整数,小于则返回负数return str->ch[i] - str[2]->ch[i]; }}//字符都相等但是长度不等,就比较长度return str1->length - str2->length; }
【C语言|C语言 数据结构与算法之字符串详解】到此这篇关于C语言 数据结构与算法之字符串详解的文章就介绍到这了,更多相关C语言 字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Java编程伪共享与缓存行填充
- TypeScript 随想 · 实际应用与技巧
- 知识增广的预训练语言模型K-BERT(将知识图谱作为训练语料)
- SpreadJS|SpreadJS + GcExcel 一出,谁与争锋!全栈表格技术轻松应对复杂公式计算场景(一)
- 详解python的运算符与表达式
- python|python 与c++相互调用实现
- SpringBoot整合缓存支持
- 福昕软件与中国船级社签署框架合作协议,共建数字船舶发展新高地
- unity3d LTS(2018-2020)国际版本下载与安装。
- 姜宁|姜宁 ASF 董事竞选宣言(我希望能够帮助 ASF 打破地域、文化、语言的障碍)