蓝蓝计算机考研算法-day04求字符串中某字符出现的次数

156 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 27 天,点击查看活动详情

Day04 2023/03/02

难度:简单

题目

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

输入描述:

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

输出描述:

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

示例

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

运行实例

image.png

思路


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

关键点


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

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

c++代码实现

#include <iostream>
#include <string>
using namespace std;

int CalNumOfWord(string s, char c) {
int count = 0;                 // 计数器计算目标字符出现的次数
c = tolower(c);                // 将要统计的目标字符也转换成小写
for (auto i : s) {             // 从头遍历字符串,其中s为当前字符串(容器),i为该字符串的每一个字符
        if(tolower(i) == c) {  // 将字符统一转成小写,当遇到目标字符计数器加1
                count++;           
        }
}
return count;  // 返回计数器
}

int main() {
	//测试一些
	string s;
	cout << "请输入字符串:" << endl;
	getline(cin, s);      // 获取完整字符串
	cout << "请输入目标字符:" << endl;
	char c = cin.get();  // 获取目标字符
	cout  << "字符串中含有该字符的个数:" << CalNumOfWord(s,c);
	return 0;
}
  • 时间复杂度 O(n)O(n) --- n 是字符串长度,需要遍历字符串一次。
  • 空间复杂度 O(1)O(1)--- 无额外的辅助空间

总结

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