本题与KY67子串计算类似,都是使用while+find循环匹配子串,这个匹配完了pos++匹配下一个范围的子串
pair在本题中的使用与map几乎没有太大区别,连迭代器遍历访问都一致,只是map自动按键升序排序在有些情况下反而不合适
// #include <iostream>
// #include <string>
// using namespace std;
// int main() {
// string str1, str2;
// // 读取包含空格的字符串,因为 cin 在遇到空格时会停止读取
// // 循环读取整行输入,直到遇到'#'结束
// while (getline(cin, str1) && str1 != "#") {
// getline(cin, str2); // 读取第二行字符串
// // 遍历str1中的每个字符,统计在str2的出现次数
// for (char c : str1) {
// int count = 0;
// // 遍历str2中的每个字符,统计c在str2中出现的次数
// for (char s : str2) {
// if (s == c) {
// count++;
// }
// }
// // 输出结果,格式为:c n
// cout << c << " " << count << endl;
// }
// }
// return 0;
// }
#include <iostream>
#include <string>
#include <vector>
#include <utility> // pair 的头文件
using namespace std;
int main() {
string str1, str2;
// 用map默认会按键升序排序对于本题不合适,用vector和pair组合实现按字符顺序统计每一位字符出现的次数
while (getline(cin, str1) && getline(cin, str2)) {
vector<pair<char, int>> count;
if (str1 == "#") {
break;
}
for (int i = 0; i < str1.size(); i++) {
char cmp = str1[i];
int pos = 0;
int cnt = 0;
while ((pos = str2.find(cmp, pos)) != string::npos) {
cnt++;
pos++;
}
count.push_back(make_pair(cmp, cnt));
}
// 输出结果
for (auto it = count.begin(); it != count.end(); it++) {
cout << it->first << " " << it->second << endl;
}
}
return 0;
}

京公网安备 11010502036488号