c 数据结构 顺序串

来源:互联网 发布:centos安装sftp 编辑:程序博客网 时间:2024/06/10 23:32
/* * 顺序 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#define OK 1#define ERROR -1#define OVERFLOW -2#define MAXSIZE 255typedef int statue;typedef char Elemtype;typedef struct {char *pBase;int chunsize;}HString;//函数的前置声明statue Strini(HString &str);//初始化statue StrAssign(HString &str,char *val);void Strshow(HString str);bool isEmpty(HString str);statue Strcopy(HString &str1,HString str2);int Strlength(HString str);statue Concat(HString &str1,HString str2);//str2 链接到str1后面statue SubString(HString &sub,HString s,int pos,int length);int StrCompare(HString str1,HString str2);//比较两个字符串大小 1 0 -1int Index(HString str1,HString str2);//str2 第一次在 str1 中的位置int main(void){HString str,str2;Strini(str);Strini(str2);char val[255];gets(val);StrAssign(str,val);gets(val);StrAssign(str2,val);//printf("%d\n",StrCompare(str,str2));//Concat(str,str2);//SubString(str2,str,4,5);//Strshow(str2);printf("%d\n",Index(str,str2));return 0;}statue Strini(HString &str){str.pBase=(Elemtype *)malloc(sizeof(Elemtype)*MAXSIZE);if(str.pBase==NULL){printf("內存分配失敗\n");exit(OVERFLOW);}str.chunsize=0;return OK;}statue StrAssign(HString &str,char *val){int i,length;length=strlen(val);if(length>MAXSIZE){printf("子串过大\n");return ERROR;}for(i=0;i<length;i++){str.pBase[i]=val[i];}str.chunsize=length;return OK;}void Strshow(HString str){int i;if(isEmpty(str)){printf("This chuan is empty\n");exit(-1);} for(i=0;i<str.chunsize;i++){printf("%c",str.pBase[i]);}printf("\n");}bool isEmpty(HString str){if(str.chunsize==0)return true;return false;}statue Strcopy(HString &str1,HString str2){int i;if(isEmpty(str2)){printf("This chuan is empty\n");return ERROR;}for(i=0;i<str2.chunsize;i++){str1.pBase[i]=str2.pBase[i];}str1.chunsize=str2.chunsize;return OK;}int Strlength(HString str){if(isEmpty(str))return 0;return str.chunsize;}statue Concat(HString &str1,HString str2){int i,length;length=Strlength(str1)+Strlength(str2);if(isEmpty(str1)||isEmpty(str2)){printf("this chuan is empty\n");return ERROR;}while(length>MAXSIZE){str1.pBase=(Elemtype *)realloc(str1.pBase,sizeof(Elemtype)*length);}for(i=Strlength(str1);i<length;i++){str1.pBase[i]=str2.pBase[i-Strlength(str1)];}str1.chunsize+=str2.chunsize;return OK;}int StrCompare(HString str1,HString str2){int i,j,k;str1.chunsize>str2.chunsize ? k=str1.chunsize:k=str2.chunsize;if(isEmpty(str1)||isEmpty(str2)){printf("this chuan is empty\n");exit(-1);}for(i=0;i<k;i++){if(str1.pBase[i]>str2.pBase[i]){return 1;}else if(str1.pBase[i]<str2.pBase[i]){return -1;}if(i+1==k){return 0;}}}statue SubString(HString &sub,HString s,int pos,int length){int i;if(pos<0||pos>s.chunsize){printf("This pos ERROR\n");return ERROR;}if(s.chunsize-pos<length){printf("This length ERROR\n");return ERROR;}if(isEmpty(s)){printf("This chuan is empty\n");return ERROR;}for(i=0;i<length;i++){sub.pBase[i]=s.pBase[i+pos-1];}sub.chunsize=length;return OK;}int Index(HString str1,HString str2){int i=0,j=0,k;if(isEmpty(str1)||isEmpty(str2)){printf("this chuan is empty\n");exit(-1);}while(i<str1.chunsize&&j<str2.chunsize){//printf("%c*********%c\n",str1.pBase[i],str2.pBase[j]);//printf("%d----%d\n",i,j);if(str1.pBase[i]==str2.pBase[j]){i++;j++;}else{j=0;i=i-j+1;}}//printf("%d-->>>--%d\n",i,j);if(j>=str2.chunsize){return i-str2.chunsize+1;}else if(i>str1.chunsize){return 0;}}

1 0
原创粉丝点击