1.int to char
sprintf()
int num=456;
char a[5];
sprintf(a , "%d" , int num);
//将num转换成十进制然后逐位存入char型数组a中
%c 整数转成对应的 ASCII 字元
%d 整数转成十进位
%f 倍精确度数字转成浮点数
%o 整数转成八进位
%s 整数转成字符串
%x 整数转成小写十六进位
%X 整数转成大写十六进位
2.char to int
sscsnf()
char a[5] = "123";
int num;
sscanf(a , "%d" , &num);//将char型数组转换成十进制int型num
3.二分法查找
这两个都必须将数组提前按照升序排好,当然降序也行,就是你把4看成大于2还是小于2的事了,说白了就是换个角度,下面的是按照升序来的
(lower_bound(a,a+n,int num)-a):在数组a中找到第一个大于等于num的数字并返回其下标
int a[6] = {1,2,3,4,5,6};
int num = 4;
cout << lower_bound(a,a+6,num)-a << endl;//输出3
(upper_bound(a,a+n,int num)-a):在数组a中找到第一个大于num的数字并返回其下标
int a[6] = {1,2,3,4,5,6};
int num = 4;
cout << upper_bound(a,a+6,num)-a << endl;//输出4
但这两个都是基于二分法查找的,要想准确,就要提前排序!!!
具体例子可以看看蓝桥杯2018年B组递增三元组这道题
4.返回string型输出从第几个到第几个字符
substr(a,b):返回下标从a到b的字符串
string s = "asdfg";
cout << s.substr(1,2) << endl;//此时会输出sd
5.排序
sort(a, a+n,comepare):根据comepare确定数组a是升序还是降序,n是数组长度
bool comepare(int a,int b){
return a<b;//这样是升序排列,如果改为return a>b,就是降序了
}
int main()
{
int num[] = {6,8,2,6};
sort(num,num+4,comepare);
//如果想要升序排列,可以不用谢comepare,因为升序是默认的
for(int i=0;i<sizeof(num)/sizeof(num[0]);i++){
cout << num[i] << endl;
}
return 0;
}
6.得到数组中最大值和最小值
max_element(),min_element():
这两个函数用来快速得到数组中的最大/小值和最大/小值下标
其中num是定义的数组名,6是数组num的长度,例如:
int num[6]={1,0,5,2,5,0};
cout << *max_element(num,num+6) << endl;
//则此时输出的是num数组的最大值5
int num[6]={1,0,5,2,5,0};
cout << max_element(num,num+6)-num << endl;
//则此时输出的是num数组的最大值的下标2
(注意:无论是max_element()或是min_element(),若数组中最大值为多个相同值时,只按照最先出现的最大值来输出。eg:这里的最大值下标是2而不是4)
min_element()和max_element()的应用方法相同
7.去重函数
unique(data,data+n):将date数组去重,n是数组长度
注意:unique只是能对相邻元素去重,例如:
int main()
{
int date[6] = {2,3,3,6,2,5};
int n = unique(date,date+6)-date;
/*因为unique是将重复的数字放在了最后面
所以n用来记录没有重复的数字有多少几个*/
for(int i=0;i<n;i++){
cout << date[i] << endl;
}
//结果是: 2 3 6 2 5
return 0;
}
这样就只能将相邻的3去重,而不相邻的2就不能实现去重,所以用这个函数之前还需要使用sort()进行排序才行,更重要的是所谓的去重并没有将重复的内容删去,而是把他们都排在了最后面
8.最大公约数和最小公倍数
__gcd:这个函数来求最大公约数,调用一个万能头文件,可以直接用,但有些就用不了,如果用不了参考第二个代码段
//可以直接引用型:
int main()
{
int gc = __gcd(4,8);
cout << gc << endl;
//输出最大公约数4
return 0;
}
//不可以直接引用型:
int gcd(int a,int b){
if(b==0) return a;
else
return gcd(b,a%b);
}
lcm:这个函数是需要自己定义的,来求最小公倍数
int lcm(int a,int b){
return a/__gcd(a,b)*b;
}
9.交换函数
swap(a,b):就是将a和b进行交换,不用再有一个中间变量了
注意:a和b是必须是同一类型
#include<bits/stdc++.h>
using namespace std;
int main(){
int a=3,b=2;
swap(a,b);
cout << a << " " << b << endl;
//输出结果为:2 3
return 0;
}
10.排列组合
next_permutation(): 这是在STL中的,注意要先将数组用sort排个升序
//int型数组:
#include<bits/stdc++.h>
using namespace std;
int main(){
int num[3] = {5,2,6};
sort(num,num+3);
//先使用sort排个序
do{
for(int i=0;i<3;i++)
cout << num[i] << " ";
cout << endl;
}while(next_permutation(num,num+3));
}
/*结果展示:
2 5 6
2 6 5
5 2 6
5 6 2
6 2 5
6 5 2
*/
//string型:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s ;
sort(s.begin(),s.end());
//先使用sort排个序
do{
cout << s << endl;
}while(next_permutation(s.begin(),s.end()));
}
/*结果展示
hca//输入hca
ach
ahc
cah
cha
hac
hca
*/
11. 字符串对比
compare(), strcmp()
string s1="asd", s2="asd";
s1.compare(s2);
/*相等返回0, 大于返回1, 小于返回-1*/
char s1[10]="asd", s2[10]="zxc"
strcmp(s1, s2);
/*相等返回0*/
12. int to string
stringstream实现
/*方一*/
int i=15;
stringstream s1; // 使用输入输出流 头文件要包含#include<sstream>
s1 << x; // 读入数字给流处理
string s = s1.str(); // 转换成string
/*s为转换后的结果*/
/*方二*/
string s = "";
int i = 15;
s += to_string(i); // C++11新增 std::to_string
13. 字符串翻转
reverse() 函数没有返回值
/*数组颠倒顺序*/
#include <algorithm>
int num[3]={ 1, 2, 3 };
reverse( num, num+3 );//3是数组长度
/*数组变成num[3]={ 3, 2, 1 }*/
/*颠倒vactor容器中内容顺序*/
#include <algorithm>
vector<int> v = { 1, 2, 3 };
reverse(v.begin(),v.end());
/*容器变成v = { 3, 2, 1 }*/
/*字符串颠倒顺序*/
#include <algorithm>
string str="asdf";
reverse(str.begin(),str.end());
/*字符串变成str="fdsa"*/
14. 在数组中查找某个值
find 能查到就返回下标地址,找不到返回数组长度
i 的位置=find(开始位置,结束位置+1,i )
#include <algorithm>
int num[] = {1, 2, 3};
int *index;
index = find(num, num+3, 3);//index是查找到3的所在地址
cout << index-num << endl;//用3所在地址减去数组首元素地址就是3的下标
/*这里输出2*/
int num[] = {1, 2, 3};
int *index;
index = find(num, num+3, 5);//找不到返回数组长度所在地址
cout << index-num << endl;
/*这里输出数组长度3*/
/**/
15. 集合set< int >
存进去的元素可以自动升序排序,且去重
#include<set>
#include<iostream>
set<int>::iterator it;//在调用set的元素之前,需要定义迭代器
set<int> s;
s.insert(5);//把5插入进去
s.insert(5);
s.insert(3);
for (it=s.begin();it!=s.end();it++)//输出每个插入的值
cout<<*it<<endl;
/*
输出:
3
5
*/
//集合s中查找元素i:s.find(i)
//清除s的所有元素:s.clear()
//集合为空 s.empty()==true
//删除一个元素 s.erase()
//集合长度 s.size()
//集合开始的地址 s.begin()
//集合结束的地址 s.end()
/*
在集合s中查找元素i:s.find(i),返回i的地址
若s中不含i,则s.find(i)==s.end()
若s中不含i,则s.find(i)!=s.end()
*/
16. 字符串
字符串长度
string型:s.length(), s.size()
char型:strlen(s)
输入字符串
getline :可接收空格,适用string
string str;
getline(cin,str);
cin :接收一个字符串,string和char一样,遇到“空格”,“TAB”,"回车"都结束
char ch[20];
string s;
cin >> s;
cin >> ch;
cout << ch << endl;
cout << s << endl;
/*asf cjg
cjg
asf*/
getchar() :接受一个字符,可接收空格,回车,只适用于char,常用于吃回车
char ch;
ch = getchar();
cin.get :可接收空格,只适用于char,获取指定数量字符
char ch[20];
cin.get(ch, 11);//获取10个字符
char ch1;
cin.get(ch1);//获取1个字符,相当于ch1 = cin.get()
/**/
cin.getline() :可接收空格,只适用于char,用法和cin.get()差不多,获取指定数量字符
char a[20];
cin.getline(a, 20);
char m[3][20];
for(int i=0;i<3;i++)
cin.getline(m[i],20);
gets() : 接收一个字符串,可以接收空格,只适用于char
char ch[20];
gets(ch);