华为OJ-002

计算字符个数

Posted by Shaun on April 7, 2018

题目描述

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

输入描述:

输入一个有字母和数字以及空格组成的字符串,和一个字符。

输出描述:

输出输入字符串中含有该字符的个数。

示例1

输入

ABCDEF A

输出

1

算法实现

实现1
//思路1:遍历字符串。因题目不区分大小写,所以比较时将两者转换为大写(或小写)
#include <iostream>
#include <string>
using namespace std;
int main() {
    string str;
    char ch;
    int count=0;
    cin>>str;
    cin>>ch;
    for(int i=0;i!=str.size();i++){
        if(toupper(str[i])==toupper(ch))
            count++;
    }
    cout<<count<<endl;
    return 0;
}
实现2
//思路2:直接使用algorithm中的count函数
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
    string str;
    char ch;
    while (cin >> str >> ch)
        cout << (count(str.begin(), str.end(), toupper(ch))
               + count(str.begin(), str.end(), tolower(ch)))
             << endl;
    return 0;
}
实现3
//思路3:用map来做,直接查询对应字符的个数
#include <iostream>
#include <map>
using namespace std;
int main(){
    map<char,int>words;
    char ch;
    while ((ch=getchar())) {
        if(ch=='\n')
            break;
        else
            words[ch]++;
    }
    cin>>ch;
    cout<<words[ch]<<endl;
    return 0;
}

小结

思路1是最常规的遍历比较。思路2用到了count函数,如果对这个函数不熟可能想不到。思路3用map来做,是很好的思路,如果后续需要查其他字符,直接在map中找即可。