nyoj 5 Binary String Matching(string)

Binary String Matching

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
 
描述
Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is ‘11’, you should output 3, because the pattern A appeared at the posit
 
输入
The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And it is guaranteed that B is always longer than A.
输出
For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
样例输入
3
11
1001110110
101
110010010010001
1010
110100010101011 
样例输出
3
0
3 
 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 using namespace std;
 5 int main(){
 6     int test, j, i;
 7     string a, b;
 8     int n;
 9     cin >> test;
10     while(test--){
11         n = 0;
12         cin >> a >> b;
13         int len_a = a.length(), len_b = b.length();
14         for(i = 0; i < len_b; i++){
15             int k = i;
16             for(j = 0; j < len_a; k++,j++){
17                 if(b[k] != a[j])
18                     break;
19             }
20             if(j == len_a)
21                 n++;
22         }
23         cout << n << endl;
24     }
25     return 0;
26 }

上面是直接遍历。

以下代码利用find()函数

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main(){
 6     int t;
 7     string a, b;
 8     cin >> t;
 9 
10     while(t--){
11         cin >> a >> b;
12         int n = 0;
13         int index = b.find(a, 0);//返回从0开始找到子串在串中的位置下标
14         while(index != b.npos){//npos表示不存在
15             n++;
16             index = b.find(a, index + 1);
17         }
18         cout << n << endl;
19     }
20 
21     return 0;
22 }    
原文地址:https://www.cnblogs.com/qinduanyinghua/p/6392681.html