- 如何控制每两个数之间有空格,而最后一个数之后没有空格?解决方法之一是:第一个数之前不加空格,而其后每个数之前加空格。而通过一个标识变量可以判断出是否是第一个数。
- 初做多实例测试,要注意变量赋初值的位置。
- 流可以加速,方法是关闭和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));
|
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++里。
|
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);
|
1
|
reverse(s.begin(),s.end());
|