數據結構中定位函數Index的使用方法
實現代碼:
#include<stdio.h>#include<string.h>#include<stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 40 //最大字符串typedef int Status;typedef char SString[MAXSIZE+1];//此處聲明的SString[maxsize+1]雖是數組,在SubString中作為指針使用,//因位是指針,SString[0]存放實際數組的地址,使用時不用加*或&,直接傳入數組的值/*******************************聲明部分****************************************/Status StrAssign(SString T,char *chars);//生成一個其值等于chars的串T 第一個元素為字符串長度int StrLength(SString S);//操作結果:返回S的元素個數,成為串的長度int StrCompare(SString S,SString T);//操作結果:若S>T,則返回值>0;若S = T,則返回值 =0;若S<T,則返回值<0Status SubString(SString Sub, SString T,int pos,int len);//用Sub返回串T的第pos個字符起長度為len的子串int Index(SString S,SString T,int pos);//若主串S中存在和串T值相同的子串,則返回它在主串中第pos個字符之后第一次出現的位置;否則函數值為0/*******************************函數部分****************************************/Status StrAssign(SString T,char *chars){ int i,ct; for(i = 0;i <= MAXSIZE; i++) T[i] = '/0'; //全部清零 T[0] = strlen(chars); for(ct = 1;*chars != '/0';ct++,chars++){ T[ct] = *chars; } return OK;}int StrLength(SString S){ return S[0];}int StrCompare(SString S,SString T){ int cnt = 1; while(cnt <= S[0] && cnt <= T[0]){ //非空前提下 if(S[cnt] == T[cnt]){ //相等 cnt++; } else{ //不相等 return S[cnt] - T[cnt]; } } return S[0]-T[0];}Status SubString(SString Sub, SString T,int pos,int len){ if(pos<1 || pos>T[0] || len<0 || len>T[0]-pos+1) return ERROR; int ct,cnt; for(ct = 1,cnt = pos;cnt <= len+pos;ct++,cnt++){ Sub[ct]=T[cnt]; } Sub[0] = len+1; return OK;}int Index(SString S,SString T,int pos){ SString Sub; int i = pos; if(pos > 0){ int n = StrLength(S),m = StrLength(T); while( i<= n-m+1){ SubString(Sub,S,i,m-1); if(StrCompare(Sub,T)==0) return i; else i++; } }//if printf("不存在/n"); return 0; //S中不存在與T相等的子串}//Index/*******************************主函數部分**************************************/int main(){ char *chars1 = "abcdefhg"; char *chars2 = "defhg"; SString S,T; StrAssign(S,chars1); StrAssign(T,chars2); int ANSWER = Index(S,T,1); printf("找到子串T在S中的位置 = %d/n",ANSWER); return 0;}
實現效果:
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答