題目:子字串出現次數
問題描述:
給予兩個英文字串,請計算出第一個字串出現在第二個字串中的次數。
輸入說明:
輸入分為兩行,第一行是由英文大小寫字母與數字所組成的字串,長度不超過 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;
}
留言列表