千家信息网

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

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下C语言如何实现串的顺序存储表示与基本操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 串的三种存储表
千家信息网最后更新 2026年11月04日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安全错误 数据库的锁怎样保障安全 科技互联网政务服务 北京互联网科技公司 奇酷互联网科技 凡科互联网科技 广州互联网络科技有限公司 科技伦理 互联网公司 银川新华互联网科技学校地址 银川新华互联网科技职业技术培训学校图片 互联网大会黑科技排名 互联网媒体平台算高科技产业 健康食品互联网创新科技园项目 中国互联网公司排名锤子科技 互联网安防科技感 江苏互联网科技小贷 南京一网一红互联网科技有限公司 陕西九四连强互联网科技有限公司 福仕德教育科技互联网 求路客互联网科技电话 深圳互联网科技园地址 武汉亿视互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 互联网金融 科技 西安互联网科技公司 天下捷融互联网科技 互联网科技公司有哪些 深圳期待互联网科技 亿人帮互联网科技 厦门千工互联网科技有限公司 国大互联网教育科技有限公司薪资 互联网科技企业商标注意事项
0