C语言如何实现串的顺序存储表示与基本操作
发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,小编给大家分享一下C语言如何实现串的顺序存储表示与基本操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 串的三种存储表
千家信息网最后更新 2025年11月16日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安全错误
数据库的锁怎样保障安全
软件开发需要什么自身条件
分局积极开展网络安全宣传
学生管理系统服务器版
镇海区智能刀片服务器不二之选
枣庄商城软件开发哪家好
母乳数据库建设标准
数据库原理及技术实验3
网络安全行业竞争格局
计算机网络技术大专工资多少
软件开发输入评审报告
广州手机软件开发培训学校
达梦数据库给字段加索引
浪潮服务器设置管理口网关
简述打开数据库文件的方法
网络安全顺口溜幼儿园
三星服务器内存和现代服务器内存
网络安全讨论交流
计算机数据库的构建
电商app数据库需求文档
医院网络安全风险排查报告
数据存储服务器安全隐患
头条的数据库
亚太互联网普保科技
高级软件开发专业
张恒 联通网络技术研究院
局域网服务器文件自动备份
数据库建表后如何连接
网络安全手抄报免费下载
软考数据库高级怎么考
张家口市网络安全知识答题活动