1. 程式人生 > 其它 >資料結構——串

資料結構——串

串,即字串 是有零個或多個字元組成的有限序列 

字元在主串中的位置:字元在串中的序號(位序從1開始;空格也是字元)

串的基本操作主要以子串作為操作物件

設計串的時候 ch[0]廢棄不用,並且在末尾新增變數length記錄串的長度。

ch[0]廢棄不用:字元的位序和陣列下標相同。但char之戰1B也就是8bit,以功能儲存0~255個數,空間有限。

串的儲存

//串的順序儲存
#define MAXLEN 255
typedef struct{  //靜態
  char ch[MAXLEN];
  int length;
}SString;

typedef struct{  //動態
  char *ch;
  
int length; }HString; HString S; S.ch = (char *)malloc(MAXLEN * sizeof(char)); S.length=0; //串的鏈式儲存 typedef struct StringNode{ //char ch;//1B 儲存密度低 char ch[4]; struct StringNode * next;//4B }StringNode,* String;

串的基本操作

//求子串
bool SubString(SString &Sub,SString S,int pos,int len){ //第pos個字元起是長度為len的子串,Sub返回想要找到的子串的內容
if(pos+len-1 > S.length)//判斷子串是否越界 return false; for(int i=pos;i<pos+len;i++)//將Sub的值複製到ch數組裡,並且把長度設為len Sub.ch[i-pos+1] = S.ch[i]; Sub.length = len; return true; } //比較串大小 若S>T 返回值>0,=<同理 bool StrCompare(SString S,SString T){ for(int i=1;i<S.length && i<=T.length;i++){
if(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i]; } return S.length-T.length } //定位操作 若主串S中存在與子串T值相同的子串,則傅安輝它在主串中第一次出現的位置 int Index(SString S,SString T){ int i=1,n=StrLength(S),m=StrLength(T);//n表示S的長度 SString sub; while(i<=n-m+1){ SubString(sub,i,m); if(StrCompare(sub,T)!=0) ++i; else return i; } return 0; }