1. 程式人生 > >7-7 刪除字串中的子串(15 分) 字串的應用

7-7 刪除字串中的子串(15 分) 字串的應用

題目描述:

7-7 刪除字串中的子串(15 分)

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

輸入格式:

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

輸出格式:

在一行中輸出刪除字串S1中出現的所有子串S2後的結果字串。

輸入樣例:

Tomcat is a male ccatat
cat

輸出樣例:

Tom is a male
賽後分析:字串模擬,但是比賽的時候並沒有做出來,對於字串題目的掌握還是不夠好,賽後看了看題解,在比賽的時候想到用string中的substr來做了,但是忘記這個函式的用法了,C語言庫函式裡面也有許多可以用的函式,但是大一C語言學的並不好,出來混,總是要還的... 題目分析: 
  substr(i, x)從字串的第 i 號下標開始,向後面擷取 x 位,並且可以賦值給一個新的字串  erase(i, x) 從下標i 開始,向後刪除 x 位   AcCode:
#include<bits/stdc++.h>
using namespace std;

int main()
{
    char str1[100];
    char str2[100];
    gets(str1);
    gets(str2);
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    string s1, s2;
    for(int i = 0; i < len1; i++) s1 += str1[i];
    for(int i = 0; i < len2; i++) s2 += str2[i];
    while(1){
        bool flag = false;
        for(int i = 0; i < s1.size(); i++){
            string s = s1.substr(i, s2.size());
            if(s == s2) {flag = true; s1.erase(i, s2.size());}
        }
        if(!flag) break;
    }
    cout << s1 << endl;
    return 0;
}