数据结构 串的定长顺序存储
来源:互联网 发布:java set集合获取元素 编辑:程序博客网 时间:2024/06/05 19:34
#include<stdio.h>#include<stdlib.h>#include<string>#include<iostream>using namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN + 1]; //0号单元存放串的长度Status StrAssign(SString T,char chars[]){ //赋值 //生成一个其值等于chars的串T。 int i; if(strlen(chars)>MAXSTRLEN) return ERROR; T[0]=strlen(chars); for(i=0;i<=T[0];i++) { T[i+1]=chars[i]; } return OK;}Status StrCopy(SString T,SString S){//复制 //由串S复制得串T int i; for(i=1;i<=S[0];i++) { T[i]=S[i]; } T[0]=S[0]; return OK;}Status StrEmpty(SString S){//判空 if(S[0]==0) return TRUE; else return FALSE;}Status Strcompare(SString S,SString T){//比较 //若S>T,则返回值>0,若S=T,则返回值=0;若S<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(SString S){//长度 return S[0];}Status Concat(SString T,SString S1,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; for(i=1;i<S1[0];i++) { T[i]=S1[i]; } 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,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){ Sub=NULL; 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; else return i; } }return 0;}Status StrInsert(SString S,int pos,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(SString S){//输出函数int i;for (i = 1; i <= S[0]; i++){cout << S[i];}cout << endl;return 0;}int main(){ int pos,len;SString S1,S2,T1,T2,Sub;char a[100], b[100];cout << "请输入两个串,分别赋值给串s1和串s2" << endl;cin >> a >> b;StrAssign(S1, a);StrAssign(S2, b);cout << "把串S1拷贝给T1,输出T1:";StrCopy(T1, S1);StrPrint(T1);if (StrEmpty(T1) == 1)cout << "串T1为空!" << endl;elsecout << "串T1非空!" << endl;if (Strcompare(S1, S2) > 0)cout << "S1>S2" << endl;else if (Strcompare(S1, S2) < 0)cout << "S1<S2" << endl;elsecout << "S1=S2" << endl;cout << "连接S1,S2为T2,输出T2:";if (Concat(T2, S1, S2) == 1)StrPrint(T2);elsecout << "串连接失败" << endl;cout << "串T2的长度为:";cout <<StrLength(T2)<< endl; cout << "请输入求子串的pos和len的值"<<endl;cin >> pos>> len;if (SubString(Sub, S1, pos, len) == 1){cout << "输出子串Sub:";StrPrint(Sub);}elsecout << "求子串失败!" << endl;if (Index(T2, S2, pos)){cout << "pos的值为:";cout << pos << endl;}elsecout << "pos的值不合法" << endl;cout << "在串S1的第pos位置插入串S2" << endl;cout << "输入pos的值:";cin >> pos;if (StrInsert(S1, pos, S2) == 1){cout << "输出串S1:";StrPrint(S1);}elsecout << "插入失败" << endl; cout << "从串S1中删除第pos位置起长度为len的字符" << endl;cout << "输入pos,len的值:";cin >> pos >> len;if (StrDelete(S1, pos, len) == 1){cout << "输出删除后的串S1:";StrPrint(S1);}elsecout << "删除失败" << endl;return 0;}
</pre><pre><pre name="code" class="cpp">
1 0
- 数据结构 串的定长顺序存储
- 串的定长顺序存储
- 数据结构--串--定长顺序存储表示
- 数据结构---串的定长顺序实现
- 串的定长顺序存储结构
- 串的定长顺序存储表示
- 串的定长顺序存储表示
- 串的定长顺序存储结构
- (C语言)串定长顺序存储实现(数据结构十二)
- 数据结构(C语言)读书笔记10:串的定长顺序存储表示
- 学习笔记------数据结构(C语言版)串的定长顺序存储表示
- C语言数据结构——串的定长顺序存储结构
- C语言数据结构——串的定长顺序存储结构
- 串的定长存储
- “串”的定长顺序存储表示的实现
- 定长顺序存储的串的表示和实现
- 串的定长顺序存储及其应用 C语言
- 串采用定长顺序存储结构的基本操作
- java DVD
- LTE CodeWords and Layers and Ports
- Java基础:类加载器
- GPU中与CUDA相关的几个概念
- oracle分区表详解
- 数据结构 串的定长顺序存储
- Jquery 和JS获取下拉列表的值
- 操作Android中联系人,通话记录,短息,的URI-项海涛
- 神来之笔之傅里叶变换(Fourier Tranformation)
- typedef解析
- es集群:禁止分片和副本分配
- String比较为什么要用equals?用==的问题
- ruby 更新到 2.3.1
- springMVC 上传和下载