刪除字串中的子串

2021-10-01 08:41:00 字數 1217 閱讀 6959

輸入2個字串s1和s2,要求刪除字串s1**現的所有子串s2,即結果字串中不能包含s2。

輸入格式:

輸入在2行中分別給出不超過80個字元長度的、以回車結束的2個非空字串,對應s1和s2。

輸出格式:

在一行中輸出刪除字串s1**現的所有子串s2後的結果字串。

輸入樣例:

tomcat is a male ccatat

cat輸出樣例:

tom is a male

解題思路:

基礎演算法(演算法一)

用了好久才寫出來。最鬧人的情況是諸如 s1 為 paatt,s2 為 at 的情況。因為不單單是刪除子串,刪除子串之後在新的字串中還要檢查是否有子串。

解題思路:

掃瞄,發現有子串時,刪除子串(將後面的子串向前移),然後置 i = 0,又會開始掃瞄,掃瞄出口即是 s1[1] != null;

處理中要注意如 s1 為 ccat,s2 為 cat 的情況。在掃瞄第二個 c 的時候,也就是說已經匹配了一部分字元後,之後不再匹配,要將當前的字元再與子串的第乙個字元比較,這裡第二個也是 c,與子串首字母相同,所以置 count = 1;

注意處理要刪除的子串在字串末尾的情況

puts 函式一直輸出到 null(即 『\0』)為止,並將 null 轉為 『\n』 輸出。所以注意在字串的最後新增 null;

使用字串處理函式(演算法二)

使用 c 程式自帶的字串處理函式能更加方便地處理問題。**也會變得非常簡潔。

注意 strcpy, strcat 中的傳入引數的記憶體位址不能重疊。否則會出錯。剛開始的時候犯了這個錯,導致有兩個測試點通不過。

演算法一#include

int main ()

s1[j] = null;

i = 0;

count = 0;

continue;

} if (s1[i] == s2[count]) else if (s1[i] == s2[0]) else

i++;

}if (s2[count]==null && count>0) //處理要刪除的字串在 s1 末尾的情況

puts(s1); //puts 函式遇 null 才會結束

return 0;}

演算法二#include

#include

int main(void)

puts(a);

return 0;

刪除字串中的子串

請編寫乙個函式,刪除乙個字串的一部分。函式原型如下 int del substr char str,char const substr 函式首先應判斷substr是否出現在str中。如果它並未出現,函式就返回0 如果出現,函式應該把str中位於該子串後面的所有字元複製到該子串的位置,從而刪除這個子串...

刪除字串中的子串

輸入2個字串s1和s2,要求刪除字串s1 現的所有子串s2,即結果字串中不能包含s2。輸入格式 輸入在2行中分別給出不超過80個字元長度的 以回車結束的2個非空字串,對應s1和s2。輸出格式 在一行中輸出刪除字串s1 現的所有子串s2後的結果字串。輸入樣例 tomcat is a male ccat...

刪除字串中的子串

7 29 刪除字串中的子串 20 分 輸入2個字串s1和s2,要求刪除字串s1 現的所有子串s2,即結果字串中不能包含s2。輸入在2行中分別給出不超過80個字元長度的 以回車結束的2個非空字串,對應s1和s2。在一行中輸出刪除字串s1 現的所有子串s2後的結果字串。tomcat is a male ...