一个ACM蒟蒻的掉坑手册

还好提桶跑的早...

  • 如何控制每两个数之间有空格,而最后一个数之后没有空格?解决方法之一是:第一个数之前不加空格,而其后每个数之前加空格。而通过一个标识变量可以判断出是否是第一个数。
  • 初做多实例测试,要注意变量赋初值的位置。
  • 流可以加速,方法是关闭和stdio的同步,即调用
1
ios::sync_with_stdio(false);
  • 未指定输入量的输入框架
1
2
3
while(scanf("%d",&a)!=EOF){} 
//或 
while(cin>>a){}
  • 能写成函数尽量写成函数,解耦、复用、易于定位错误,不要把 main() 写的又臭又长,出错了改都不好改。
  • memset函数可以初始化数组。这条命令这在你已经修改了数组之后又想将它重置为全0特别有用(然鹅它是操作字节,也就初始为0/-1比较有用)。
1
2
3
#include <cstring>
int arr[100]={0};
memset(arr,0, sizeof(arr));
  • CPP int&string互相转换
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <iostream>
#include <sstream>

using namespace std;

int main(){
    int x=10000,y;
    stringstream ss;
    string s;
    ss<<x;
    s=ss.str();
    cout<<s.length()<<endl;
    ss>>y;
    cout<<y/2<<endl;
}
  • 使用C语言sscanf()函数将string/char转换成int(或其他类型)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <bits/stdc++.h>
using namespace std;

int main() {
    string a="123456789";
    int x;
    sscanf(a.c_str(),"%d",&x);
    cout<<x<<endl;
    return 0;
}
  • 重定向:
1
2
3
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
//不能用在C++里。
  • main函数可以递归 调用自身:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include<cstdio>
double a,sum;
int main()
{
    if(scanf("%lf",&a)!=EOF)
    {
        sum+=a;
        main();
    }
    else printf("%.5f",sum);
    return 0;
}
  • long double类型使用%Lf占位.
  • 一次读取一行
1
2
string s;
while(getline(cin,s)){}

这个语句的执行过程是这样的:先调用getline()函数,getline()将istream cin中的内容读取一行(你输入的是hello world),保存进string s中,而getline()的返回值就是cin。也就是说,这个循环的判定条件是while(cin),cin是怎么转化为bool类型进行条件判断的呢?这个判定实际上隐式调用了 !cin.fail(),而fail()这个成员函数被定义在ios_base类里面(这是istream的基类basic_ios的基类)。那么调用fail()返回的是什么?是cin的状态。cin的状态是由4个标志位指示的(关于stream的标志的内容实际上就可以在C++ Primer中找到),分别是badbit(表示流已经崩溃),failbit(表示IO操作失败),eofbit,goodbit。当badbit或者failbit被置位时,fail()会返回true,!fail()结果为false。当遇到文件末端时,eofbit和failbit都会被置位,因此只有碰到Ctrl+Z(Windows下输入即等同文件末端eof),while()条件不再满足,退出。 链接:https://www.zhihu.com/question/27859723/answer/38385260

  • 字符串所有字母转换为大写
1
transform(s.begin(),s.end(),s.begin(),::toupper);
  • 反转string
1
reverse(s.begin(),s.end());
Licensed under CC BY-NC-SA 4.0
FrostMiKu
Built with Hugo
主题 StackJimmy 设计