“串”的定长顺序存储表示的实现

来源:互联网 发布:js延迟调用函数函数 编辑:程序博客网 时间:2024/06/05 17:25

串——数据结构的实现——定长存储顺序。

//头文件sstring.h#pragma once#include<iostream>using namespace std;#define STRING_SIZE 20typedef  char Sstring[STRING_SIZE+1];int length(Sstring S){  return strlen(S);}void StrAssign(Sstring T, char *str){  int i=0;  while(*str != '\0')  {     T[i++] = *str++;  }  T[i] = '\0';}bool StringConcat(Sstring T,Sstring s1,Sstring s2){  int a = length(T);  int b = length(s1);  int c = length(s2);  if(a>b+c)  {     for(int i=0;i<b;i++) { T[i] = s1[i];} for(int j= b; j < b+c;j++) { T[j] = s2[j];} T[j] = '\0';return true;  }  else if(a>b && a<b+c)  {     for(int i=0;i<b;i++) { T[i] = s1[i];} for(int j=b;j<=STRING_SIZE;j++) { T[j] = s2[j];} T[j] = '\0';return true;  }  else if(a<b)  {     for(int i=0;i<=STRING_SIZE;i++) {T[i] = s1[i];} T[i] = '\0';  }  return true;}void StrCopy(Sstring T, Sstring S){   int i=0;   while(S[i] != '\0')   {    T[i] = S[i];i++;   }   T[i] = '\0';}bool StrEmpty(Sstring S){   if(S[0] == '\0')   return false;   return true;}int StrCompare(Sstring T, Sstring S){   int i=0;   while(T[i]-S[i] == 0)   {         i++;   }   if(T[i]-S[i]>0)     return 1;   if(T[i]-S[i]<0) return -1;   else return 0;}void ClearString(Sstring T){  int i=0;  T[i]='\0';}char * SubString(Sstring T,int pos,int len,Sstring S){if(length(T)<pos+len)return false;for(int i= 0;i<len;i++){  S[i] = T[i+pos];}S[i] = '\0';return S;}int Index(Sstring S,Sstring T,int pos){int s_len=length(S);int t_len=length(T);   for(int i=pos;i<=s_len - t_len;i++)   {   for(int j=0;j <= t_len;++j)   {  if(S[j+i]==T[j])  { if(j == t_len-1) {return i;}   else {continue;}  }  else   break;   }     }  return 0;}bool Replace(Sstring S,Sstring T,Sstring V){  int sl=length(S);  int tl=length(T);  for(int i=0;i<sl-tl;i++)  {     for(int j=0;j <= tl;++j)   {  if(S[j+i]==T[j])  { if(j == tl-1) {   for(int m =0;m<tl;m++)   {   S[m+i] = V[m];   } }   else {continue;}  }  else break;   }    } return 0;}bool StrInsert(Sstring S,int pos,Sstring T){    //1<=pos<=length(S)+1int sl=length(S);int tl=length(T);if(pos>sl+1)return false;for(int i=0;i<=sl-pos;i++){  S[sl+tl-i]=S[sl-i];}    for(int j=pos;j<tl+pos;j++){S[j] = T[j-pos];}return true;}bool StrDelete(Sstring S,int pos,int len){  if(pos>length(S)+1) return false;  for(int i=pos;i<length(S)-pos;i++)  {  S[i]=S[i+len];  }  return true; }void DestroyString(Sstring S){   S[0]='\0';}


主函数:

#include"sstring.h"void main(){  char *str1="asdcsdhasda";  char *str2="sd";  char *str3="zr";  Sstring S;  Sstring T;  Sstring V;  StrAssign(S,str1);  StrAssign(T,str2);  StrAssign(V,str3);  Replace(S,T,V);  //StrInsert(S,3,T);  //StrDelete(S,1,2);  /*    int ret=Index(S,T,3);    cout<<ret<<endl;  */  //int ret=StrCompare(T,S);  //StrCopy(S,T);  //cout<<ret<<endl;  //cout<<SubString(T,0,5,S)<<endl;  //cout<<length(S)<<endl;  cout<<S<<endl;}


 

 

 

注释部分为各函数的,图片没有一一附上。

0 0
原创粉丝点击