计算某字符出现次数
计算某字符出现次数
要点:1.大写字母ASCII码65开始,小写97开始;
2.或者用库函数tolower©:tolower©是一个标准库函数,它是C++中库的一部分。这个函数接受一个字符(大写或小写)作为输入,如果输入字符为大写字母,则将其转换为小写字母。小写字母和非字母字符在调用这个函数后保持不变。这也就是说,这个函数返回输入字符对应的小写版本。
方法一:
#include <iostream>
#include <string>
using namespace std;int main() {string s;getline(cin, s);char target;cin >> target;int cnt = 0;for(char i : s){if(i == target){cnt += 1;continue;}else if((i >= 65 && i <= 90 && i+32 == target) || i >= 97 && i <= 122 && i - 32 == target){cnt += 1;}}cout << cnt;return 0;
}
// 64 位输出请用 printf("%lld")
方法二:
#include <cctype>
#include <iostream>
#include <string>
#include <algorithm>using namespace std;int main(){string s;getline(cin, s);char target;cin >> target;char k = tolower(target); // 将k转化为小写,大写转化为小写,小写和其它不变transform(s.begin(), s.end(), s.begin(), ::tolower); // 将s转换为小写int result = count(s.begin(), s.end(), k); // 计数cout << result;return 0;
}
transform解释
transform(s.begin(), s.end(), s.begin(), ::tolower); 这行代码对字符串s执行了一个转换操作,将s中的所有字符都变为小写。让我们究竟看看每个部分是如何运作的。
std::transform()是C++标准库中的一个算法,它可以将一个函数应用于一个范围内的每个元素,并将结果存储在另一个范围内。具体来说,它有四个参数:
输入范围的开始(s.begin()): 我们希望从s的开头开始转换。
输入范围的结束(s.end()): 我们希望转换到s的结尾。
输出范围的开始(s.begin()): 我们希望将结果保存回s,所以输出范围也从s的开头开始。
转换函数(::tolower): 我们希望对每个字符执行的操作。::tolower是一个函数,它将任何大写字符转换为小写。双冒号(::)表示这个函数属于全局命名空间。
执行这行代码后,字符串s中的所有字符都会被转换为小写。适用这个转换操作的情况之一就是你想要在不区分大小写的情况下处理字符串。