串的顺序存储表示

来源:互联网 发布:怎么开启数据网络 编辑:程序博客网 时间:2024/05/18 03:52
#include <stdio.h>#include<stdlib.h>#define Error 0#define Ok  1#define MAXSIZE  256typedef int Status;typedef struct {char str[MAXSIZE];int length;}SqString;        //定义串的结构体,用一个数组存储串Status  StrAssign(SqString &T,char chars[]){             //生成一个值等于chars的串Tint i,j;T.length=0;i=sizeof(chars)/sizeof(char);for(j=0;j<i;j++)T.str[j]=chars[j];                    //将一个数组中的数据传递到一个串中T.length=i;return Ok;}Status  StrLength(SqString T)                         //获取串T的长度{return T.length;}Status  StrCope(SqString &T,SqString S)             //将一个串中的值拷贝到另一个串中{int i;for(i=0;i<S.length;i++)T.str[i]=S.str[i];T.length=S.length;return Ok;}Status StrCompare(SqString s1,SqString s2)           //将两个串的长度进行比较{if(s1.length>s2.length)printf("串一大于串二\n");else if(s1.length==s2.length)printf("串一等于串二\n");elseprintf("串一小于串二\n");return Ok;}Status  Concat(SqString &T,SqString s1,SqString s2)             //将两个串合并{int i,j;if(s1.length+s2.length>MAXSIZE)return Error;for(i=0;i<s1.length;i++)T.str[i]=s1.str[i];for(j=0;j<(s2.length);j++)T.str[s1.length+j]=s2.str[j];T.length=s1.length+s2.length;return Ok;}Status SubString(SqString &Sub,SqString s,int pos,int len)           //从一个串中截取一个子串{int i,j;if((pos<1||pos>s.length)&&(len<0||len>s.length-pos+1))return Error;for(i=pos,j=0;j<len;i++,j++)Sub.str[j]=s.str[i-1];Sub.length=len;return Ok;}void print(SqString T)                        //输出串{int i;for(i=0;i<T.length;i++)printf("%c",T.str[i]);printf("\n");}void main(){SqString S,T,T2,T3,T4;int pos,len;char chars[]={'a','b','c','d'};char charss[]={'e','r','t','y'};StrAssign(T2,charss);StrAssign(T,chars);printf("串一为:");print(T);printf("串二为:");print(T2);StrCope(S,T);printf("复制串一后的串为:");print(S);printf("判断串一与串二的长度大小\n");StrCompare(T,T2);printf("将串一与串二连接为:");Concat(T3,T,T2);print(T3);printf("输入从合并后的串中在第几个位置截取几位作为子串");scanf("%d,%d",&pos,&len);SubString(T4,T3,pos,len);printf("子串为:");print(T4);getchar();getchar();}

串的定长顺序存储表示,就是用的普通的数组来存储串

这个是个简单的表示,没有用书上的算法,书上的还要考虑截断什么的,老师说那个没有必要,所以就按照这个写了



原创粉丝点击