1. 程式人生 > >刪除子串(字串、迴圈)

刪除子串(字串、迴圈)

【問題描述】
編寫一個程式,當在一個字串中出現子串時就刪除它。

【輸入形式】
使用者在第一行輸入一個字串,使用者在第二行輸入一個子串。注意:第二行輸入結束時可能用回車,也可能不用回車。

【輸出形式】
程式在下一行輸出刪除其中所有子串後的字串。如果字串不包含子串則輸出原字串本身。

【樣例輸入】
I am a boy!
a

【樣例輸出】
I m boy!

【樣例說明】
使用者首先輸入字串I am a boy!,然後輸出子串a,程式會尋找字串中的子串刪除它,最後 將刪除後的結果輸出:I#m##boy! #表示空格。請注意子串長度不一定為1。

#include <iostream>
#include <string.h> using namespace std; int main() { char str[100], Substr[50]; cin.get(str,100);//因為字串裡可能包含空格,所以用cin.get()輸入 cin.get();//用cin.get()需要吞掉回車 cin.get(Substr,50);//輸入子串 int len1 = strlen(str);//字串長度 int len2 = strlen(Substr);//子串長度 for(int i=0;i<len1;++i)//查詢字串中每一個字元
{ int key = 1; if(str[i]==Substr[0])//如果第i個字元等於子串中的第一個字元 { for(int j=i+1,k=1;k<len2;++j,++k)//開始比較第i個字元後len2長度的每個字元是否跟子串的每個字元相等 if(str[j]!=Substr[k]) key = 0;//如果不等就標記key=0 if(key==1)//如果每一個都相等,就開始刪除字串中和子串相同的內容 {
int index = i; while(index<len1-len2)//當index+len2<len1時就迴圈,不然取的str[index+len2]沒有意義 { str[index] = str[index+len2];//每個字元一一覆蓋 index++; } str[index] = '\0';//別忘記最後一個放結束符,否則原字串的最後一個字元會迴圈輸出直到原長度 } } } cout << str << endl; return 0; }