c++写算法题时一些语法问题

表示先赋值给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的规则编译代码,会有一些以前常用的函数无法通过编译。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇