閱讀下列說明和C函數(shù),填補C函數(shù)中的空缺,將解答填入答案紙的對應(yīng)欄目內(nèi)。
【說明】
字符串是程序中常見的一種處理對象,在字符串中進行子串的定位、插入和刪除是常見的運算。
設(shè)存儲字符串時不設(shè)置結(jié)束標志,而是另行說明串的長度,因此串類型定義如下:
typedef struct ﹛
Char *str; //字符串存儲空間的起始地址
int length; //字符串長
int capacity; //存儲空間的容量
﹜SString;
【函數(shù)1說明】
函數(shù)indexStr(S,T,pos)的功能是:在S 所表示的字符串中,從下標pos開始查找T所表示字符串首次出現(xiàn)的位置。方法是:第一趟從S中下標為pos、T中下標偉0的字符開始,從左往右逐個對于來比較S和T的字符,直到遇到不同的字符或者到達T的尾。若到達T的末尾,則本趟匹配的起始下標pos為T出現(xiàn)的位置,結(jié)束查找;若遇到了不同的字符,則本趟匹配失效。下一趟從S中下標pos+1處的字符開始,重復(fù)以上過程。若在S中找到T,則返回其首次出現(xiàn)的位置,否則返回-1。
例如,若S中的字符為偉”students ents”,T中的字符串偉”ent",pos=0,則T在S中首次出現(xiàn)的位置為4。
【C函數(shù)1】
int index Str(SString S ,SString T,int pos)
﹛
int i,j:
i (S.length<1||T.length<1||pos+T.length-1)
return-1;
for(i=pos,j=0;i<t.length;)﹛
if (S.str[i]==T.str[j])﹛
i++;j++;
﹜
else﹛
i=( 1 );j=0
﹜
﹜
if ( 2 )return i -T.length;
return-1;
﹜
【函數(shù)2說明】
函數(shù) eraseStr(S,T}的功能是刪除字符串S中所有與T相同的子串,其處理過程為: 首先從字符串 S 的第一個字符(下標為0)開始查找子串T,若找到〈得到子串在S中的起始位置),則將串 S 中子串T之后的所有字符向前移動,將子串T覆蓋,從而將其刪除,然后重新開始查找下一個子串T,若找到就用后面的宇符序列進行覆蓋,重復(fù)上述過程,直到將S中所有的子串T刪除。
例如,若字符串 S為 “12ab345abab678”、T為“ab”。第一次找到“ab”時(位置為2),將“345abab678”前移,S 中的串改為“12345abab678” ,第二次找到“ab”時(位置為 5);將“ab678”前移,S中的串改為“12345ab678”,第三次找到“ab”時(位置為5);將“678”前移 ,S中的串改為“12345678 ”。
【C函數(shù)2】
Void eraseStr(SString*S,SStringT)
﹛
int i;
int pos;
if (S->length<1||T.length<1||S->length<t.length)
return;
Pos=0;
for(;;)﹛
//調(diào)用indexStr在S所表示串的pos開始查找T的位置
Pos=indexStr( 3 );
if(pos=-1) //S所表示串中不存在子串T
return;
for(i=pos+T.length;ilength;i++) //通過覆蓋來刪除自串T
S->str[( 4 )]=S->str[i];
S->length=( 5 ); //更新S所表示串的長度
﹜
﹜</t.length)