close
題目:子字串出現次數
 
問題描述:
給予兩個英文字串,請計算出第一個字串出現在第二個字串中的次數。
輸入說明:
輸入分為兩行,第一行是由英文大小寫字母與數字所組成的字串,長度不超過 128 個字母。
第二行也是由英文大小寫字母與數字所組成的字串,長度不超過 512 個字母。
輸出說明:
第一個字串出現在第二個字串中的次數。
 
這題有很多解法,在這我分享我其中一種~~
 
所謂子字串,就是找一長串字串中,找出裡面有你想找的幾個小字串,如題目所示(・A・)
 
那麼!! 一開始當然是先打好題目兩個input,和一個計數器count = 0(之後揭曉幹啥用得(・ิω・ิ) )
 
我先例如: 小字串son; 大字串mon
 
在這我們在記錄他們的長度 例如: sonlong ; monlong
 
之後觀察他們比較了幾次,
 
例如: son = ab ; mon = ababa   sonlong = 2 ; monlong = 5
 
他們比較了 5 - 2 + 1 = 4 次
 
也就是說,這外層迴圈要做的次數
 
接下來,有請劊子手幫切長字串
 
他的切法根據子字串的大小(建議用小迴圈來切放字元)
 
所以我們先在創個空間room給他放屍.....阿~~不是,是字串(;´Д`A
 
之後再用個計數器temp ,初始值當然是0
 
再開個迴圈,比較room和son裡頭的字元是否一致
 
如果一致,就將temp++
 
最後在判斷temp 有沒 等於 sonlong
 
假如一樣,就將等候已久的count++
 
答案count就呼之欲出啦ヾ(* ' ∀ ' *)ノ
 
end ლ(◉◞౪◟◉ )ლ
 
code :

#include <iostream>
using namespace std;

int main() {
    // [C_ST42-易] 子字串出現次數
    string str1, str2;
    //str1出現在str2中的次數
    getline(cin, str1);
    getline(cin, str2);
    int fpos = 0, count = 0;
    while(1)
    {
        fpos = str2.find(str1,fpos);
        //在P字串中尋找子字串Q
        if(fpos != string::npos)
        {
            fpos = fpos + 1;
            count++;
        }
        else  //如果找不到就跳出迴圈
        {
            break;
        }
    }
    cout << count << endl;
    return 0;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 佑佑 的頭像
    佑佑

    佑佑的語言

    佑佑 發表在 痞客邦 留言(0) 人氣()