刪除子串(字符串、循環)


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

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

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

【樣例輸入】
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;//第一個開關
        int key2 = 0;//第二個開關
        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';//別忘記最后一個放結束符,否則原字符串的最后一個字符會循環輸出直到原長度
                key2 = 1;//如果進行了刪除相同字符串操作,key2=1;
            }
        }
        if(key2==0) i++;//如果沒有刪除字符串那么i就加一,指向下一個字符繼續比較
        //如果key2==1,那么就不要i++,因為刪除字符串完了之后下標i就是指向下一個字符;如果依舊++i,那么當母串是aaaaa,子串是a時就會出問題
    }
    cout << str << endl;
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM