摘要:希賽網為大家整理了2017上半年程序員考試案例分析真題,以下為第三部分。【試題三】 閱讀下列說明和C函數,填補C函數中的空缺,將解答填入答案紙的對應欄目內。【說明】
希賽網為大家整理了2017上半年程序員考試案例分析真題,以下為第三部分。
【試題三】
閱讀下列說明和C函數,填補C函數中的空缺,將解答填入答案紙的對應欄目內。
【說明】
字符串是程序中常見的一種處理對象,在字符串中進行子串的定位、插入和刪除是常見的運算。
設存儲字符串時不設置結束標志,而是另行說明串的長度,因此串類型定義如下:
Typedef struct﹛
Char*str//字符串存儲空間的起始地址
int lehgth//字符串長
int capacity//存儲空間的容量
﹜SString;
【函數1說明】
函數indexStr(S,T,pos)的功能是:在S所表示的字符串中,從下標pos開始查找T所表示字符串首次出現的位置。方法是:第一趟從S中下標為pos、T中下標偉0的字符開始,從左往右逐個對于來比較S和T的字符,直到遇到不同的字符或者到達T的末尾。若到達T的末尾,則本趟匹配的起始下標pos為T出現的位置,結束查找;若遇到了不同的字符,則本趟匹配失效。下一趟從S中下標pos+1處的字符開始,重復以上過程。若在S中找到T,則返回其首次出現的位置,否則返回-1。
例如,若S中的字符串偉″students ents″,T中的字符串偉″ent″,pos=0,則T在S中首次出現的位置為4。
【C函數1】
int index Str(SString S,SString T,int pos)
﹛
int i,j:
i(S.length<1||S.length<pos+T.length-1)
return-1;
for(i=pos,j=0;i<S.length&&j<T.length;)﹛
if(S.str<i>==T.str[j])﹛
i++;j++;
﹜
else﹛
i=();j=0
﹜
﹜
if()return i-T.length;
return-1;
﹜
【函數2說明】
函數eraseS位(S,T}的功能是刪除字符串S中所有與T相同的子串,其處理過程為:首先從字符串S的第一個字符(下標為0)開始查找子串T,若找到〈得到子串在S中的起始位置),則將串S中子串T之后的所有字符向前移動,將子串T覆蓋,從而將其刪除,然后重新開始查找下一個子串T,若找到就用后面的宇符序列進行覆蓋,重復上述過程,直到將S中所有的子串T刪除。
例如,若字符串S為“12ab345abab678”、T為“ab”。第一次找到"ab"時(位置為(2),將"345abab678"前移,S中的串改為"12345abab678",第二次找到"ab"時(位置為5);將ab678前移,S中的串改為"12345ab678",第三次找到"ab"時(位置為5);將“678‘前移,S中的串改為"12345678"。
【C函數2】
Void eraseStr(SString*S,SStringT)
﹛
int i;
int pos;
if(S->;length<||T.length<1||S->length<T.length)
return;
Pos=0
for(;;)﹛
//調用indexStr在S所表示串的pos開始查找T的位置
Pos=indexStr();
if(pos=-1)//S所表示串中不存在子串T
return;
for(i=pos+T.length;i<S->t;length;i++)//通過覆蓋來刪除自串T
S->str[()]=S->;str>[i]
S->length=();//更新S所表示串的長度
﹜
﹜
>>>>返回目錄:2017上半年程序員考試案例分析真題(匯總)
>>>>進入估分:2017上半年軟考分數早知道,在線估分+真題解析
>>>>點擊查看:2017上半年程序員上午真題答案和解析
軟考備考資料免費領取
去領取