开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 27 天,点击查看活动详情
Day04 2023/03/02
难度:简单
题目
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个目标字符,然后输出该字符串中该字符的出现次数。(不区分大小写字母) 数据范围:1≤n≤1000
输入描述:
第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。
输出描述:
输出该字符串中含有该字符的个数。(不区分大小写字母)
示例
输入:字符串:"ABC abc a" 目标字符:'a'
输出:3
说明:该字符串中a字母一共出现了3次
运行实例
思路
该题比较简单,我们可以设置一个计数器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;
}
- 时间复杂度 --- n 是字符串长度,需要遍历字符串一次。
- 空间复杂度 --- 无额外的辅助空间
总结
- 该题目比较简单,使用常规的解题思路就可以完成,但还是要避免 眼高手低 的现象,在代码书写的过程中注意上述 关键点 处所描述的细节。