1、头文件String.h

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2typedef int Status;#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];  //0号单元存放串的长度//将字符数组赋值给字符串,并在第一位置记录它的长度
Status StrAssign(SString& T, char chars[])
{ //生成一个其值等于chars的串T。int i; if(strlen(chars)>MAXSTRLEN)return ERROR;//这里的长度最大只能是255,可以表示成一个字符 T[0] = strlen(chars);for(i = 0; i <= T[0]; i++){T[i+1] = chars[i];}return OK;
}//字符串复制
Status StrCopy(SString& T, const SString& S)
{//由串S复制得串Tint i;for(i = 1; i <= S[0]; i++){T[i] = S[i];}T[0] = S[0];return OK;
}//判断否为空字符串
Status StrEmpty(const SString& S)
{//判空if(S[0] == 0)return TRUE;elsereturn FALSE;
}//比较字符串
Status StrCompare(const SString& S, const SString& T){//若S>T,则返回值>0,若S=T,则返回值=0;若S<T,则返回值<0//s[0]和T[0]分别表示为字符串长度int i;for(i = 1; i<=S[0] && i<=T[0]; i++){if(S[i] != T[i])return S[i] - T[i]; }return S[0]-T[0];}//获取字符串的长度
Status StrLength(const SString& S)
{return S[0];
}//连接两个字符串
Status Concat(SString& T, const SString& S1, const SString& S2){ //用串T返回由S1和S2连接而成的新串。int i,j;//是否被截断 Status uncut;if( S1[0]+S2[0] <= MAXSTRLEN )//未截断{T[0] = S1[0] + S2[0];for(i = 1; i <= S1[0]; i++){T[i] = S1[i];}for(j = 1; j <= S2[0]; j++){T[S1[0] + j] = S2[j]; }uncut=TRUE;}else if(S1[0] < MAXSTRLEN)//截断{T[0] = MAXSTRLEN;//将S1中的字符复制到T中 for( i = 1; i < S1[0]; i++){T[i] = S1[i];}//将S2的字符复制到T中,直到T满了为止 for(j = 1; j <= MAXSTRLEN-S1[0]; j++){T[S1[0]+j] = S2[j];}uncut=FALSE;}else// S1[0]>MAXSTRLEN{T[0] = MAXSTRLEN;for(i = 1; i<= MAXSTRLEN; i++){T[i] = S1[i];}uncut=FALSE;}return uncut;
}//求子串
Status SubString(SString& Sub, const SString& S, int pos, int len)
{   //求子串//用Sub返回串S的第pos个字符起长度为len的子串int i, j;if(pos < 1 || pos > S[0] || len < 0 || len > S[0] - pos + 1)return ERROR;if(len == 0){Sub[0] = 0;}else{for(i = 1,j = pos; i <= len-1,j <= pos+len-1; i++,j++)Sub[i] = S[j];Sub[0]=len;}return OK;
}//模式匹配
Status Index(SString& S, SString& T, int& pos)
{ //若主串S中存在和串T相同的子串,则返回它在主串S的第pos个//字符之后第一次出现的位置,否则函数值为0int n,  m, i;SString Sub;if(pos>0){n = StrLength(S);m = StrLength(T);i = pos;while(i <= n-m+1){SubString(Sub, S, i, m);if (StrCompare(Sub, T) != 0)++i;elsereturn i;}}return 0;
}Status StrInsert(SString& S, int pos, const SString& T)
{  //插入函数//在串S的第pos个字符之前插入串T。int i;if (pos<1 || pos>S[0])return ERROR;if (S[0]+T[0] < MAXSTRLEN)//完全插入{for (i = S[0]; i >= pos; i--){S[i + T[0]] = S[i];}for (i = 1; i <=T[0]; i++){S[pos-1+i] = T[i];}S[0] = S[0] + T[0];return TRUE;}else{for (i = S[0]; i >= MAXSTRLEN-S[0];i--){S[MAXSTRLEN-S[0]+1] = S[i];}for (i = 1; i <= MAXSTRLEN - S[0];i++){S[pos - 1 + i] = T[i];}return FALSE;}
}Status StrDelete(SString& S, int pos, int len)
{  //删除//从串S中删除第pos个字符起长度为len的子串int i;if (pos<1 || pos>S[0])return ERROR;elsefor (i = pos + len ; i<=S[0]; i++){S[i-len] = S[i];}S[0] -= len;return  OK;
}Status StrPrint(const SString& S)
{//输出函数int i;for (i = 1; i <= S[0]; i++){cout << S[i];}cout << endl;return 0;
}

2、测试文件test.cpp

#include "String.h"int main(void)
{    SString S, Sub, s, t;int pos;int len;int n;char a[100], b[100];cout<<"      0----退出"<<endl;cout<<"        1----初始化字符串"<<endl;cout<<"        2-----判断字符串是否为空"<<endl;cout<<"        3-----比较字符串大小,并返回"<<endl;cout<<"       4------求字符串的长度"<<endl;cout<<"     5-------截取字符串"<<endl;cout<<"      6--------查找子串的位置"<<endl;cout<<"       7--------插入子串"<<endl;cout<<"      8---------删除子串"<<endl;cout<<"     9---------打印字符串\n"<<endl; cout<<"请输入你的操作"<<endl;cin>>n;while(1){switch(n){case 0: cout<<"你已经退出"<<endl;exit(0);case 1:cout<<"请输入字符串"<<endl; cin>>a;StrAssign(S, a);break; case 2:if(!StrEmpty(S)){cout<<"字符串不是空串"<<endl;}else{cout<<"字符串是空串"<<endl;}break;case 3:cout<<"请输入你要比较的两个字符串"<<endl;cin>>a;cin>>b;StrAssign(s, a);StrAssign(t, b); n = StrCompare(s, t);if(n > 0){cout<<"第一字符串大"<<endl;}else if(n == 0){cout<<"两个字符串大小相等"<<endl;}else{cout<<"第二个字符串大" ;}break;case 4:len  = StrLength(S); cout<<"字符串的长度是:"<<len<<endl;break;case 5:cout<<"请输入你要截取的子串的位置"<<endl;n  = SubString(Sub, S, pos, len);if(n){cout<<"你截取的字符串为"<<StrPrint(Sub);}else{cout<<"截取失败"<<endl; }break;case 6:cout<<"请输入后你查找的子串"<<endl;cin>>a;StrAssign(t, a);Index(S, t, pos);cout<<"你查找的子串位置是:"<<pos<<endl;break;case 7:cout<<"请输入你要插入的位置和子串"<<endl;cin>>pos; cin>>a;StrAssign(t, a);StrInsert(S, pos, t);break;case 8:cout<<"请输入你要删除的子串位置和长度"<<endl;cin>>pos;cin>>len;StrDelete(S, n, len);break;case 9:cout<<"字符如下:"<<endl;StrPrint(S); }cout<<"     0----退出"<<endl;cout<<"        1----初始化字符串"<<endl;cout<<"        2-----判断字符串是否为空"<<endl;cout<<"        3-----比较字符串大小,并返回"<<endl;cout<<"       4------求字符串的长度"<<endl;cout<<"     5-------截取字符串"<<endl;cout<<"      6--------查找子串的位置"<<endl;cout<<"       7--------插入子串"<<endl;cout<<"      8---------删除子串";cout<<"     9---------打印字符串\n\n"<<endl; cout<<"请输入你的操作\n"<<endl;cin>>n;  }return 0;
}

字符串静态顺序结构C/C++实现(数据结构严蔚敏版)相关推荐

  1. 队列顺序结构C/C++实现(数据结构严蔚敏版)

    1.头文件Queue.h #include<iostream> using namespace std;//定义4个空间,留出一个作为标志位,当Q.rear+1 / MAXQSIZE = ...

  2. 队列链式结构C/C++实现(数据结构严蔚敏版)

    1.头文件Queue.h; #include<iostream> #include<iomanip>//格式控制头文件 #include<stdlib.h> usi ...

  3. [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构

    代码如下: #include <iostream> using namespace std;const int MAXQSIZE = 10;typedef int ElemType;typ ...

  4. [数据结构-严蔚敏版]P61ADT Queue的表示与实现(单链队列-队列的链式存储结构)

    代码如下: #include <iostream> using namespace std;typedef int ElemType;typedef struct QNode {ElemT ...

  5. 有关数据结构基础知识(数据结构 严蔚敏版)

    1. 数据结构是一门研究非数值计算程序设计中的操作对象 以及这些对象之间的关系和操作的学科 2. 研究包括逻辑结构和存储结构 1) 逻辑结构(从具体问题抽象出来的数学模型)分为 集合结构 线性结构 树 ...

  6. 数据结构(严蔚敏版)习题集第三章课后标新号习题答案

    #include<iostream> #include<cctype> using namespace std; /****预定义****/ #define STACK_INI ...

  7. 【数据结构 严蔚敏版】 查找基本操作

    顺序查找过程:从表中的最后一个记录开始,逐个进行记录的关键字与给定值进行比较,若某个记录的关键字与给定值相等,则查找成功,找到所查的记录:反之,若直到第一个记录,其关键字和给定值比较都不相等,则表明表 ...

  8. 线性表的C/C++实现(数据结构 严蔚敏版)

    下面的代码是项目文件:一个头文件.一个源文件.一个测试文件 1.头文件List.h: #include<iostream> using namespace std; #include< ...

  9. C/C++实现数据结构严蔚敏版的一些注意事项(指南)

    建议实现的时候用C++语言进行实现,因为书中的有些参考伪代码都是通过C++实现的当用C语言替换的时候作为新手的我,找起bug来有点费劲. C语言实现顺序表的过程中的注意事项: 1, 书中绪论1.3,抽 ...

最新文章

  1. [Java] Hashcode的作用
  2. 静态路由实验 +http+dns_华为静态路由配置实验
  3. php input file ajax,jquery ajax put file, php save file
  4. 互联网晚报 | 9月22日 星期三 | 中国电信控股股东拟40亿元增持;碧桂园服务100亿收购富良环球;搜狗浏览器论坛即将下线...
  5. 物联网领域的新贵LoRa
  6. oracle禁用ctss,CTSS服务介绍及模式调整
  7. IOS开发之页面跳转
  8. java arraylist对象_Java中ArrayList的对象引用问题
  9. 测试环境由谁搭建?第三方软件测试环境搭建步骤流程
  10. JSP校园自行车租赁网站平台管理系统
  11. 中国保安服务行业发展状况及前景预测分析报告2022-2028年版
  12. 快速地将SolidWorks模型导入Adams
  13. 银行计算机储蓄系统程序流程图,银行储蓄系统流程图.doc
  14. 定期报告系统服务器出错 1,做好Web服务器的日常维护必备常识
  15. VMware ESXi添加NVMe硬盘扩容
  16. 优化MySchool数据库设计(SQL Server)
  17. 化工厂人员定位详细解决方案
  18. STL学习笔记7 ——STL算法(一)
  19. 黑龙江职业学院计算机考试,黑龙江职业学院官网
  20. 联通运营商服务器繁忙,网友:为什么现在联通网络越来越慢,是不是该转运营商了?...

热门文章

  1. 1114 Family Property (25 分)【难度: 中/ 知识点: 并查集】
  2. 第二章 搜索 【未完结】
  3. VS code配置c环境
  4. Synchronize对String加锁解决
  5. Keepalived简介
  6. jQuery的淡入淡出
  7. cnn卷积神经网络_卷积神经网络(CNN)原理及应用
  8. 死磕18个Java8日期处理,工作必用!
  9. 不好意思,我真的不知道MySQL的窗口函数...
  10. springmvc教程--整合mybatis开发(spring+springMVC+mybatis整合开发)