C++好用的函数

首先,先贴柳神的博客

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 )

判断是不是数字,其他的类推

你可能感兴趣的:(C++好用的函数)