1、题目给出有可能出现空格,直接用cin>>str存在问题,遇到空格认为输入结束则空格后面的字符被舍弃; 可以使用getline(cin, str)获取输入一行字符串;

2、存在大小写,可以将匹配的字符转为大写或小写分别取字符串里面查找;

3、用for循环匹配字符与字符串中的字符计数;

c++ :

几种不同解法:
#include <iostream>
#include <string>
#include <set>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str;
    getline(cin, str);
    char ch;
    cin >> ch;
    char tmpCh = '\0';
    char tmpCh2 = '\0';
    if (ch >= 'A' && ch <= 'Z') {
        tmpCh = ch + 32;
    }
    if (ch >= 'a' && ch <= 'z') {
        tmpCh2 = ch - 32;
    } 
    //multiset<char> mSetStr;
    int cnt = 0;
    for (int i = 0; i < str.length(); i++) {
        //mSetStr.insert(str[i]);
        if (ch == str[i]) {
            //cnt++;
        } else if (tmpCh == str[i]) {
            //cnt++;
        } else if (tmpCh2 == str[i]) {
            //cnt++;
        }
    }
    cnt += count(str.begin(), str.end(), ch);
    cnt += count(str.begin(), str.end(), tmpCh);
    cnt += count(str.begin(), str.end(), tmpCh2);
    //cnt += mSetStr.count(ch);
    //cnt += mSetStr.count(tmpCh);
    //cnt += mSetStr.count(tmpCh2);
    cout << cnt << endl;
    return 0;
}