串的静态顺序存储基本操作
来源:互联网 发布:java获取ad域用户信息 编辑:程序博客网 时间:2024/05/16 05:15
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不能再用字符数组的长度来判断字符串的长度了。
#include <iostream>#include <stdbool.h>#define MAXSIZE 225using namespace std;typedef unsigned char SString[MAXSIZE + 1];//typdef unsigned char a[MAX_LEN]意思是定义类型unsigned char // [MAX_LEN]为a的形式/******************************************/void init(SString &T)//初始化{ T[0] = 0; //一定要初始化,否则判空无法完成 t[0]为t装入字符串的长度 return ;}/******************************************/void Create(SString &T, char chars[])//创建{ int i; for(i=0;chars[i]!='\0' && i+1<=MAXSIZE;i++) { T[i+1]=chars[i]; } T[0]=i;}/******************************************/void Display(SString &T)//遍历{ int i; for(i=1;i<=T[0];i++) cout<<T[i];}/******************************************/void Contact(SString &T1,SString &T2,SString &T3)//串连接 t1与t2连接成t3{ int i,k; for(i=1;i<=MAXSIZE && i<=T1[0];i++) { T3[i]=T1[i]; } k=i-1;//k为t1的长度 T3[0]=k; for(i=1;i+k<=MAXSIZE && i<=T2[0];i++) { T3[i+k]=T2[i]; } T3[0]=T3[0]+i-1;//如果t1的长度大于max则因为上面的for里面有i=1所以t3的长度还是t1的长度}/******************************************/void Copy(SString &T,SString &S)//串拷贝{ int i; for(i=1;i<=T[0];i++) S[i]=T[i]; S[0]=T[0];}/******************************************/bool empty(SString &T)//串判空{ if(T[0]==0) return true; else return false; }/******************************************/int lengh(SString &T)//求串长{ return T[0]; }/******************************************/void clear(SString &T){ T[0]=0;}/******************************************///若T大于S 返回值>0 若T等于S 返回值=0 若T小于S 返回值<0//如果T串是以S串开头的主串 只能返回0//如果S串是以T串开头的主串 可能返回不确定值//所以该函数应该是再判断了双方都不是对方的子串的时候才使用//串比较,如果第一个字符相等,则比较第二个字符,如果t1大于s1则返回正数,小于返回负数,t和s相等返回0int compare(SString &T,SString &S)//串比较{ int i,n=0; for(i=1;i<=T[0];i++) { if(T[i]!=S[i]) { n=T[i]-S[i]; break; } } return n;}/******************************************/void substr(SString &S,SString &sub, int pos,int len)//子串提取操作从pos的位置提取长度为len的子串{ int i; if(pos<0 || len<0 || pos+len-1>S[0]) return; for(i=1;i<=len;i++) { sub[i]=S[pos+i-1]; } sub[0]=i-1;}/******************************************/void insert(SString &S,int pos,SString &T)//插入{ SString new_; SString temp; substr(S,temp,1,pos-1);//把s的第一个字符到pos-1个字符提取成子串temp Display(temp);cout<<endl; Contact(temp,T,new_); //把子串temp和要插入的字符串t连接成字符串new_ Display(new_);cout<<endl; substr(S,temp,pos,S[0]-pos+1 );//把s的第pos个字符到最后一个字符提取成子串temp Display(new_);cout<<endl; Contact(new_,temp,S);//把new_子串和temp子串连接成串s,注意new_和temp的顺序影响新生成字符 Display(S);cout<<endl;}/*****************************************///从第一个到要删除的位置的前一个的字符提取子串,从要删除的最后一个字符的下一个到最后提取子串//然后把两个子串从连接给svoid delete_(SString &s,int pos,int len)//串删除{ SString temp; SString sub; if(pos<1 || pos+len>s[0]+1) return ; substr(s, temp, 1, pos-1); substr(s,sub,pos+len,s[0]-pos-len+1); Contact(temp, sub , s);}/******************************************/int Index(SString &S, SString &T, int pos)//寻找子串返回子串首次在母串中出现的首字符的位置{ int i=pos;//从第几个位置开始寻找子串t int j=1;//从子串的第一个字符开始进行匹配 while (i<=S[0] && j<=T[0])//当i不大于s0的长度且j不大于t0的长度的时候进入循环 { if (S[i] == T[j])//如果当前字符匹配成功,则匹配下一个 { ++i; ++j; } else //如果当前匹配不成功,j为t的第一个字符,i为当前匹配到的字符 { i = i-j+2;//i不写成i++的原因是虽然可以表示如果第一个字符不符合而后面的符合 j = 1; //但不能表示当第一个符合s的第二个不符合t的第二个但不一定不符合t的第一个,所以应该保留当前位置 } //如果是i++则会继续前进 } if (j > T[0]) return i-T[0]; else return 0;}/****************************/int main(){ SString t1,t2; char a[100],b[100]; cin>>a; cin>>b; init(t1); init(t2); Create(t1, a); Create(t2, b); return 0; }
http://blog.csdn.net/zhuyi2654715/article/details/6740707
0 0
- 串的静态顺序存储基本操作
- 数据结构 串(顺序存储)的基本操作
- 静态顺序表的基本操作
- 静态顺序表的基本操作
- 静态顺序表的基本操作
- 队列的顺序存储的基本操作.....
- 队列的顺序存储的基本操作.....
- 串采用定长顺序存储结构的基本操作
- 串采用定长顺序存储结构的基本操作
- 栈的顺序存储基本操作
- 栈的顺序存储及其基本操作
- 队列的顺序存储及其基本操作
- 线性表顺序存储的基本操作
- 顺序串的基本操作
- 实现基于静态数组的顺序表的基本操作
- 顺序表的基本操作——静态实现
- 线性表的顺序存储的基本操作
- 线性表的顺序存储结构的基本操作
- beanshell
- linux黑科技---GREP:查找文件夹下特定字符串
- Linux设备驱动程序--学习笔记(2)
- springmvc注解方式
- Lucene简单使用
- 串的静态顺序存储基本操作
- Eclipse插件,只给你推荐这几个
- Cypher查询语言--Neo4j中的SQL(1)
- 编程谈
- Fresco源码分析
- U盘安装centos 7 提示 “Warning: /dev/root does not exist, could not boot” 解决办法
- java设计模式进阶_dao
- Pyqt5系列(二 )-第一个PyQt程序
- lighthouse3d的GLSL教程