千家信息网

C语言如何实现串的顺序存储表示与基本操作

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,小编给大家分享一下C语言如何实现串的顺序存储表示与基本操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 串的三种存储表
千家信息网最后更新 2025年02月07日C语言如何实现串的顺序存储表示与基本操作

小编给大家分享一下C语言如何实现串的顺序存储表示与基本操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1 串的三种存储表示

串,即:字符串。要注意的是,C语言中是没有字符串数据类型的,而将其作为一种数据结构--"内容受限的线性表"进行实现,并对空串、空格串、串的长度、子串与主串等概念进行了约定。

串的存储表示主要分为三种:

【1】顺序存储表示 :使用字符型数组(一块连续的内存存储空间)来存储串的内容,其最大长度已经定义则不可修改;(这也是C语言中初始约定好的一种较为字符串内容的表示方式)

【2】堆分配存储表示:使用malloc和free函数对堆区进行操作,进行堆区内存的动态分配与释放,而这块存储空间就用于存储串的内容;

【3】块链存储表示:即采用链表的形式,通过指针,将位于不同存储空间的多个字符串"碎片"进行连接,"拼凑"成为一个完整的串

在此只介绍第一种,即:串的顺序存储表示。

2 串的顺序存储表示与基本操作

这部分就直接贴代码了

【因为这里是对数组元素的操作,就偷个懒,直接用了C语言string.h头文件中提供的一些库函数,对一些基本操作进行了简单实现。需要详细写代码的部分到串的堆分配实现时候再体现】

2.1 头文件声明

/** * 串的顺序存储实现 */#include #define  MAXLEN 255//结构体定义-表示串结构体typedef struct{ char ch[MAXLEN+1];//存储串内容的字符型数组[+1是为了存储结束标志'\0'] int length;//当前串的长度}SString;/** * 将字符串T复制为chars */int StrAssignS(SString* T,char* chars);/** * 获取字符串长度 */int StrLengthS(SString T);/** * 字符串的判空操作 */int StrIsEmptyS(SString T);/** * 串连接操作 */int StrConcatS(SString* T,char* s1,char* s2);/** * 截取子串 */int SubStringS(SString* T,SString src,int pos,int len);/** * 串清空 */int ClearStringS(SString* T);/** * 串比较 */int StrCompareS(SString T1,SString T2);

2.2 函数实现

#include "SString.h"/** * 将字符串T复制为chars */int StrAssignS(SString* T,char* chars){ //清空原始内容 memset(T->ch,0,MAXLEN); T->length=0; //重新赋值为chars strcpy(T->ch,chars); T->length=(int)strlen(chars); /*printf("len=%d\n",strlen(T->ch));*/ return 0;}/** * 字符串的判空操作 */int StrIsEmptyS(SString T){ return T.length==0;}/** * 获取字符串长度 */int StrLengthS(SString T){ return T.length;}/** * 串连接操作 */int StrConcatS(SString* T,char* s1,char* s2){ //辅助变量 char *p; //清空T中的内容 memset(T->ch,0,MAXLEN); T->length=0; //连接字符串 p=strcat(s1,s2); //字符串连接到T中 strcpy(T->ch,p); T->length=(int)strlen(p); return 1;}/** * 截取子串 */int SubStringS(SString* T,SString src,int pos,int len){ //清空T中的原始内容 memset(T->ch,0,MAXLEN); T->length=0; //获取子串 /**   char *strncpy(char *dest, const char *src, size_t n)   dest -- 指向用于存储复制内容的目标数组   src -- 要复制的字符串   n -- 要从源中复制的字符数  */ strncpy(T->ch,src.ch+pos,len); //重新设置串的长度 T->length=len; return 1;}/** * 串比较 */int StrCompareS(SString T1,SString T2){ /*  int strcmp(const char *str1, const char *str2)  如果返回值小于 0,则表示 str1 小于 str2  如果返回值大于 0,则表示 str1 大于 str2  如果返回值等于 0,则表示 str1 等于 str2 */ return strcmp(T1.ch,T2.ch);}/** * 串清空 */int ClearStringS(SString* T){ memset(T->ch,0,MAXLEN); T->length=0; return 1;}

2.3 函数测试

#include #include #include "SString.h"int main(int argc,char **argv){ SString str1,str2; //str1.ch="Hello,World!"; StrAssignS(&str1,"Hello,World"); StrAssignS(&str2,"Hello"); printf("len=%d\n",StrLengthS(str1)); //字符串连接 StrConcatS(&str1,"SHello","Hi"); printf("len=%d\n",StrLengthS(str1)); //打印字符串内容 printf("str1=%s\n",str1.ch); printf("str2=%s\n",str2.ch); printf("CompareRes=%d\n",StrCompareS(str1,str2)); //截取子串 SubStringS(&str2,str1,2,3); puts(str1.ch); puts(str2.ch); //清空字符串内容 ClearStringS(&str1); printf("str1's len=%d,str2's len=%d,\nso str1 isEmpty:%d,str2 isEmpty:%d\n",StrLengthS(str1),StrLengthS(str2),StrIsEmptyS(str1),StrIsEmptyS(str2));  return 0;}

贴上测试结果的截图:

以上是"C语言如何实现串的顺序存储表示与基本操作"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

字符 存储 字符串 内容 顺序 长度 语言 基本操作 函数 数组 空间 篇文章 结构 分配 原始 字符型 代码 内存 数据 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 金蝶k3数据库如何查询修改凭证 网络安全风险评估过程及流程 软件开发 投入产出分析 mysql中两个表导数据库 找大学计算机网络技术课后答案 昆明校招数据库公司 软件开发所需要学的软件 我的世界拔刀剑服务器怎么用 云服务器哪家 电脑网络安全模式怎么上网 组态王连接远程数据库连接 数据库免维护 java连数据库产生曲线 文件服务器和防火墙是怎么使用 从军游戏无法连接服务器 软件产品销售和软件开发服务 信息网络安全技术的核心 世界贸易组织数据库技术分析 履行网络安全监督 你无法向该服务器发送邮件 南京网络技术大会 敢达争锋对决服务器爆满进不去 华为服务器电话 ftp服务器站点 运行mt4用多大的云服务器 杭州项目软件开发需要多少钱 数据库安全控制方法 翻译类系统软件开发 从军游戏无法连接服务器 江苏电话软件开发系统
0