7-2 子字符串个数匹配
分别输入两个字符串A和B,A由多个小字符串组成(中间由非字母隔开),B是由字母组成的字符串。求出A中包含B的小字符串的个数(详细看样例),并且输出它。(不区分大小写)
输入格式:
先输入字符串A,由回车结束。然后输入字符串B。
输出格式:
输出A中包含B字符串的个数、
输入样例:
在这里给出一组输入。例如:
aaBbc4./ewfeAbc wefW%!%&aAbc++0 4Abccabc
aBc
输出样例:
在这里给出相应的输出。例如:
3
解释:
A可以看成:aabbc ewfeabc wefw aabc abccabc小字符串组成的字符串。
#include <iostream>
#include <string>
#include <vector>
#include<sstream>
using namespace std;
string delNotChar(string str) {
int len = str.size();
string b;
for (int i = 0; i <= len; i++) {
if ((str[i] >= 'a' && str[i] <= 'z') || str[i] == ' ')
b.push_back(str[i]);
else
b.push_back(' ');
}
return b;
}
int main() {
int count = 0;//匹配次数
string T;//原串
string P;//模式串
getline(cin, T);
getline(cin, P);
//换小写
for (int i = 0; i <= T.size(); i++)
T[i] = tolower(T[i]);
for (int i = 0; i <= P.size(); i++)
P[i] = tolower(P[i]);
//去除非字母非空格字符
T=delNotChar(T);
vector<string> strArray;
string word;
stringstream input(T);
while (input >> word)
strArray.push_back(word);
for (int i = 0; i < strArray.size(); i++) {
if (strArray[i].find(P, 0) != string::npos)
count++;
}
cout << count;
system("pause");
return 0;
}