表示先赋值给while参数再减一
例如:n=5 n– 输出4
n=4 n– 输出3
n=3 n– 输出2
n=2 n– 输出1
n=1 n– 输出0
n=0 退出循环
while(–n)表示先自减1在赋值给while参数,n依次为4 3 2 1
则依次输出4 3 2 1
当输入字符串有空格时用getline(cin,str);如果上面有cin的话需要吃掉空格,利用getchar();或者cin.ignore();
auto item:add
for(register int i=0;i<add.size();i++){int item=add[i];}
判断小写字母:isalpha
大小写转换:
1.字母大小写转换这类题目主要通过ASCII(美国信息交换标准代码)码差值实现,A对应ASCII码十进制数字是65,a对应ASCII码十进制数字是97,即大小写字母之间ASCII码差值为32。
想要将大写字母转换为小写字母可以将该字符ASCII码值+32,同理小写字母转换成大写字母只需将该字符ASCII码值-32。
2.函数转换:在C++语言中tolower()函数是把单个字符都转化为小写字母
toupper()函数是把单个字符都转化为大写字母
螺旋数组循环次数小于列/2;一种特殊方法求公约数: lie = sqrt(num);
while (num % lie) lie--;
hang = num / lie;
字符串去重 for (int i = 0; i < s.size(); i++) {
for (int j = i + 1; j < s.size(); j++) {
if (s[j] == s[i]) {
s.erase(s.begin() + j);//字符串去重神器
//i--;
//break;
}
}
double func(double a) /* 四舍五入到小数点后2位 */
{
if (a < 0)return -(int)(abs(a) * 100 + 0.5) / 100.0;
else return (int)(a * 100 + 0.5) / 100.0;
}对于-0.003四舍五入等于0,对于0.007四舍五入等于0
对于vector向量:vectora(n+1,1)表示个数n+1(可以从a[1]开始计算),初始值全为1
算法中处理行末空格问题:for(int i = 0;i < n;i++){
if(i == 0){
cout << a[i];
} else{
cout << " " << a[i];
}
}
或
for(int i = 0;i < n;i++){
if(i == 0){
printf("%d",a[i]);
} else{
printf(" %d",a[i]);
}
}
或 int flag = 1;//用于标记输入第一个数
for (int i = 0; i < n; i++) { //升序输出
if (max_value == vi[i]) {
if (flag) {
cout << i + 1;
flag = 0;
}
else {
cout << " " << i + 1;//后面输入先输入空格
}
}
}
或
for(int j=0;j<n;j++){
if (j != 0) printf(" ");
printf("%03d", q[j]);
}//处理空格问题,先输出空格在输出数,最后一个不会输出空格,模拟一下就行
整数去重:res.erase(unique(res.begin(),res.end()),res.end());//使用之前必须排序,不能对字符串去重
处理向上取整问题:a/c向上取整利用(a+c-1)/c
字符串转数字:在老版本中这里的str需要转化为C语言形式,两种方法str.data()或者str.c_str()才可以使用
pos参数指从下标0开始,base表示需要转化的进制
int k=stoi(const strings str, size_t* pos = 0, int base = 10)
long stol(const strings str, size_t* pos = 0, int base = 10)
float stof(const strings str, size_t* pos = 0)
double stod(const strings str, size_t* pos = 0)
数字转字符串:
string s=to_string(int value)
string to_string(long value)
string to_string(double value)
数字0-9的ASCII码:48到57(可用于判断字符串中每个元素是否为数字)
(a[i] – ‘A’ + 1);//利用ASCII码将大写字母加1表示转换为1-26,+0表示转化为0-26。
随机数初始化:srand((unsigned int)(time(NULL)));
vector二维数组初始化://先利用一维string类型的vector进行输入行,然后在第一个循环内插入所输入的行
vector>array;//定义二维数组
vectorv;//定义一维数组
array.clear();//将二维数组清空,或初始化(初始化代码很简单,不会可以百度)//也可不用这一步
int temp=0;
for (int i = 0; i < r; i++)//输入r*c的二维数组 { v.clear();//子数组返回时要清除,重新输入新的行
for (int j = 0; j < c; j++) {
cin>>temp;
v.push_back(temp);
}
array.push_back(v);
}
stringstram使用:头文件#include <sstream>,切割带空格字符串
//用于存放分割后的字符串
vector<string> res;
//待分割的字符串,含有很多空格
string word = " Hello, I want to learn C++! ";
//暂存从word中读取的字符串
string result;
//将字符串读到input中
stringstream input;
input << word;
//依次输出到result中,并存入res中
while (input >> result)
res.push_back(result);
//输出res
for (int i = 0; i < res.size(); i++) {
cout << res[i] << endl;
}
cout << "\n下面是第二次输入时再输出\n";
input << "this is a new string";
while (input >> result)
res.push_back(result);
//输出res
for (int i = 0; i < res.size(); i++) {
cout << res[i] << endl;
}
对于处理切割多行字符串加入input.clear(ios::goodbit);//刷新input缓冲区
substr(参数1,参数2):参数1为截取字符串起点位置,参数2为所要的长度
对于取平均数,如果原数为int型需要保存为double型需要将int变量转化为doule类型,例如:sc += (score*1.0) / 2;//sc为double,score为int类型
对于vector<int>c,c.back()表示数组最后一个数,可用于去除前导0
对于char数组以\0作为结尾,可以以正常个数循环输出,但是使用数组名输出时,如果没有以\0结尾会出现正常输出后面乱码情况,是由于计算机不知道这个
数组字符串的结尾在哪,真实长度比strlen长度大1,因为还有一个隐藏的\0
map的一些使用
for (map<string, h>::iterator it = s.begin(); it != s.end(); it++) {
if (s[it->first].bz < 200)continue;
first键值为下标,seconed键值为下标对应的值,默认按字典序递增排列
控制符号:dec以十进制显示,hex以16进制显示,oct以八进制显示
头文件#include <bitset> 函数bit<int a>(int b) 参数a表示显示的二进制位数,参数b为要转换的十进制整数
cout<<fixed;//以浮点数形式输出
cout.precision(2);//保留小数点后两位,采取四舍五入
cout<<setf(ios_base::boolalpha);//后面标志位可更改
标志 功能
boolalpha 可以使用单词”true”和”false”进行输入/输出的布尔值.
oct 用八进制格式显示数值.
dec 用十进制格式显示数值.
hex 用十六进制格式显示数值.
left 输出调整为左对齐.
right 输出调整为右对齐.
scientific 用科学记数法显示浮点数.
fixed 用正常的记数方法显示浮点数(与科学计数法相对应).
showbase 输出时显示所有数值的基数.
showpoint 显示小数点和额外的零,即使不需要.
showpos 在非负数值前面显示”+(正号)”.
skipws 当从一个流进行读取时,跳过空白字符(spaces, tabs, newlines).
unitbuf 在每次插入以后,清空缓冲区.
internal 将填充字符回到符号和数值之间.
uppercase 以大写的形式显示科学记数法中的”e”和十六进制格式的”x”.
补充前导0:头文件#include <iomanip> cout<<setw(位数)<<setfill(‘0’)<<endl;//注意setfill函数的参数需要单引号括起来
处理一种特殊rank问题
int rank = 0, pres = -1;//测试点45为排名问题,这里借鉴柳神的处理排行问题,单纯是因为懒的想hhh,利用前驱he来进行更新rank,如果相同rank不变,如果不同rank+1
for (int i = 0; i < q.size(); i++) {
if (pres != q[i].he) rank = i + 1;//将下标与rank联系在一起初始i为0,初始肯定不等于输出 rank为i+1,同时个数由i来计数
pres = q[i].he;//更新前驱
cout<<rank;//乙级1085
解决cout超时问题:ios::sync_with_stdio(false); 利用c语言的输入输出比cout和cin快三倍
对于c如何输出string类型的字符串,printf("%s",str.c_str());可以输出string类型字符串
万能头文件:#include <bits/stdc++.h>
error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings //使用网络编程的时候这个报错,两种解决方法,在头文件定义#pragma warning(disable:4996)将错误改成warning,另一种是在项目属性C/C++常规里面把SDL检查改为否,提出error的原因是为了保证安全
SDL: Security Development Lifecycle,安全开发生命周期检查,微软在VS2012新推出的东西,为了能更好的监管开发者的代码安全,如果勾选了这一项则将严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译。