首先,先贴柳神的博客
https://www.liuchuo.net/ 这是地址
想要刷好PTA,强烈推荐柳神的博客,和算法笔记
下面贴一下这篇博客的参考地址
https://www.cnblogs.com/mydomain/p/9984482.html
① 大小写转换的问题
①-①char类型
可以使用tolower(char c)转换为小写,toupper(char c)转换为大写
例子如下
#include
#include
using namespace std;
int main() {
char a = 'a', b = 'A';
printf("%c\n",tolower(b));//把字符转换为小写
printf("%c", toupper(a)); //把字符转换为大写
return 0;
}
②-① String类型
tolower 就是转换为小写
toupper就是转换为大写
例子如下
#include
#include
#include
using namespace std;
int main()
{
string s = "ABCDEFGabcdefg";
string result;
transform(s.begin(), s.end(), s.begin(),::tolower);
cout << s << endl;
transform(s.begin(), s.end(), s.begin(),::toupper);
cout << s << endl;
return 0;
}
② string里面find的用法
a.find()
查找第一次出现的目标字符串:
#include
#include
#include
using namespace std;
int main()
{
string s1 = "abcdef";
string s2 = "ef";
int ans = s1.find(s2); //在S1中查找子串S2 返回找到的位置
printf("%d", ans);
//这里ans为4
return 0;
}
如果没有找到返回值就是string::npos
例子如下
#include
#include
#include
using namespace std;
int main()
{
string s1 = "abcdef";
string s2 = "ez";
int ans = s1.find(s2); //在S1中查找子串S2 返回找到的位置
printf("ans is %d\n", ans);
//这里ans为4
for (int i = 0; i < s2.length(); i++)
{
if (s1.find(s2[i]) == string::npos) {
printf("%c is Wrong",s2[i]);
}
}
return 0;
}
② 二分里面好用的函数
②-①upper_bound(ForwardIterator first, ForwardIterator last,const T& val))
ForwardIterator first是一个
ForwardIterator first 是指要查询的数列的起点
ForwardIterator last 是值要查询的数列的终点
const T&val 表明输入进去的值
官方的原文
Returns an iterator pointing to the first element in the range [first,last)
which compares greater than val.
返回一个迭代器,指向第一个元素超过val的地址
因为返回的是地址,所以我们求下标的时候就要把这个地址减去数列的起始地址
②-②lower_bound(ForwardIterator first, ForwardIterator last,const T& val))
他们的参数都是一样的,不一样的在功能上
官方的原文
Returns an iterator pointing to the first element in the range [first,last)
which does not compare less than val
返回一个迭代器,指向第一个不小于val的值的地址,也要减去数列的起始地址才是下标
下面是官方的解释代码
// lower_bound/upper_bound example
#include // std::cout
#include // std::lower_bound, std::upper_bound, std::sort
#include // std::vector
int main () {
int myints[] = {10,20,30,30,20,10,10,20};
std::vector v(myints,myints+8); // 10 20 30 30 20 10 10 20
std::sort (v.begin(), v.end()); // 10 10 10 20 20 20 30 30
std::vector::iterator low,up;
low=std::lower_bound (v.begin(), v.end(), 20); // ^
up= std::upper_bound (v.begin(), v.end(), 20); // ^
std::cout << "lower_bound at position " << (low- v.begin()) << '\n';
std::cout << "upper_bound at position " << (up - v.begin()) << '\n';
return 0;
}
官方解释文档如下
http://www.cplusplus.com/reference/algorithm/lower_bound/
http://www.cplusplus.com/reference/algorithm/upper_bound/
③ 进制转换里面的一些函数
C++里面自己写的函数(可以转换2-36的函数)
long long convert(string n, long long radix) {
long long sum = 0;
int index = 0, temp = 0;
for (auto it = n.rbegin(); it != n.rend(); it++) {
temp = isdigit(*it) ? *it - '0' : *it - 'a' + 10;
sum += temp * pow(radix, index++);
}
return sum;
}
④ 字符串里面的一些好用的函数
④-① max_element(n.begin(), n.end())
max_element(n.begin(), n.end())
n是字符串
⑤ 判断类型的好用的函数
⑤-① isdigit(char a )
判断是不是数字,其他的类推