HJ2 计算某字符出现次数

219 阅读2分钟

Day02 2023/01/09

题目链接

难度:简单

题目

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个目标字符,然后输出该字符串中该字符的出现次数。(不区分大小写字母) 数据范围:1≤n≤1000

输入描述:

第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。

输出描述:

输出该字符串中含有该字符的个数。(不区分大小写字母)

示例

输入:字符串:"ABC abc a"  目标字符:'a'
输出:3
说明:该字符串中a字母一共出现了3

思路


该题比较简单,我们可以设置一个计数器count,从头遍历字符串,遇到目标字符,计数器加1,即可。

关键点


  • 由于题目中不区分大小写,所以可以统一转成小写,来进行判断。

  • 使用 getline() 方法获取整个字符串,避免使用 cin << s 时遇到空格就结束的以至于无法获取完整字符串的问题。

c++代码实现

#include <cctype>
#include <iostream>
#include <string>
using namespace std;
//方法一:
class Solution {
	public:
		int CalNumOfWord(string s, char c) {
		int count = 0;
		//计数器计算目标字符出现的次数
		c = tolower(c);
		//将要统计的目标字符也转换成小写
		//从头遍历字符串,其中s为当前字符串(容器),i为该字符串的每一个字符
		for (auto i : s) {
			if(tolower(i) == c) {
				//将字符统一转成小写
				count++;
			}
		}
		return count;
		//返回计数器
	}
};
//
int main() {
	//测试一些
	string s;
	cout << "请输入字符串:" << endl;
	getline(cin, s);
	//获取完整字符串
	cout << "请输入目标字符:" << endl;
	char c = cin.get();
	//获取目标字符
	cout << endl;
	Solution s1;
	cout  << s1.CalNumOfWord(s,c);
	return 0;
}
  • 时间复杂度 O(n)O(n) --- n 是字符串长度,需要遍历字符串一次。
  • 空间复杂度 O(1)O(1)

总结

  • 该题目比较简单,使用常规的解题思路就可以完成,但还是要避免 眼高手低 的现象,在代码书写的过程中注意上述 关键点 处所描述的细节。