这篇文章将带大家深入了解C语言数据结构与算法中的字符串,文中主要是介绍了字符串的定义、字符串的比较以及一些串的抽象数据类型,感兴趣的可以学习一下
串的定义
零个或多个字符组成的有限序列
串的比较
串的比较实际上是在比较串中字符的编码
存在某个k < min(n,m),使得ai = bi (i = 1,2,3,4..k)
如果 ak < bk --> 那么srt1 < srt2 (反之也成立)
除去相等的字符,在第一个不相等的字符位置以Ascii码进行比较
串的抽象数据类型
串的顺序存储结构示意图
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列
typedef struct sqString{
char* ch; //若串为空,则按串长分配存储区
//否则ch = NULL
int length;//串长
}sqString;
串的初始化
相关定义初始化
/** 状态码 **/
#define TRUE 1
#define FALSE 0
#define EQ 0
#define GT 1 //大于
#define LT -1 //小于
定长类初始化
#define MAX_SIZE 1024
typedef struct{
char ch[MAX_SIZE + 1];
//定长方式实现了字符串的顺序结构--缺点是浪费空间
int length;
}SString;
串的堆式顺序存储结构(Heap)
/** 串的堆式顺序存储结构(Heap)**/
typedef struct{
char * ch;
//如果是非空串,那么就按照指定长度分配内存,否则ch就指向NULL
int 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 ++){
//遇到不同的字符就直接比较Ascii
if(str->ch[i] != str[2]->ch[i]){
//大于则返回整数,小于则返回负数
return str->ch[i] - str[2]->ch[i];
}
}
//字符都相等但是长度不等,就比较长度
return str1->length - str2->length;
}
到此这篇关于C语言 数据结构与算法之字符串详解的文章就介绍到这了,更多相关C语言 字符串内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C语言 数据结构与算法之字符串详解


猜你喜欢
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- Easyx实现扫雷游戏 2023-02-06
- C语言详解float类型在内存中的存储方式 2023-03-27
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Qt计时器使用方法详解 2023-05-30
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- ubuntu下C/C++获取剩余内存 2023-09-18
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言qsort()函数的使用方法详解 2023-04-26