一些编程小技巧的个人总结,方便后期查看:
#include<bits/stdc++.h>
using namespace std;
int INF = 2147483647;
double eps = 1e-8;
#define Equ(a,b) (fabs((a)-(b))<(eps))
#define More(a,b) (((a)-(b))>(eps))
#define Less(a,b) (((a)-(b))<(-eps))
#define MoreEqu(a,b) (((a)-(b))>(-eps))
#define LessEqu(a,b) (((a)-(b))<(eps))
int main(){
// scanf("%lld %lf %f");
// printf("\\ %% %05d %.0f %.1f");
// double = fabs(double x);
// %.0f = floor/ceil(double)
// pow(double) 求的是幂次方
// sqrt也是double
// PI = acos(负一。0)
// round 四舍五入
// strcat是把2接到1上面
// sscanf 注意有一题是接受的个数 前面补0
// sscanf("%d:%lf,%s")可以实现切取
// 二维数组作为参数 【】【n】第二个必须写明
// *p = &int a
const double eqs = 1e-8;
double a,b;
a = 1.23;
b = 1.2300;
if(Equ(a,b)) printf("1");
}
//
//int main(){
// strncpy(s,s起始地址,长度即可);
// 特定截取的方式
//int len(int k){
// int temp = 0;
// while(k!=0){
// temp++;
// k/=10;
// }
// return temp;
//}
//int main(){
// cout<<len(233)<<endl;
// int lena = 5;
// int qian;
// while(lena > 0){
// lena--;
// qian *= 10;
// }
// cout<<qian;
//char Toup(char aa) {
// if(isdigit(aa)) return aa;
// if(aa >= 'a'&&aa <= 'z') {
// return aa-32;
// } else {
// return aa;
// }
//}
//int main() {
// printf("%c",Toup('a'));
// printf("%c",Toup('A'));
// printf("%c",Toup('c'));
// printf("%c",Toup('0'));
// printf("%c",Toup('Z'));
//
// memcpy(temp.matrix, matrix, sizeof(matrix));
// //拷贝数组,二维数组,大小已知的!
//int main() {
// char a[8][9];
//
// int t, i, j, k;
// scanf("%d", &t);
// k = 1;
// getchar();
// while(t--) {
//.......A
//........
//........
//........
//........
//........
//........
//U.......
// for(i = 0; i < 8; i++) {
// scanf("%s", a[i]);
// }
//const int maxn=100000+10;
//const int INF=2*int(1e9)+10;
//#define LL long long
//int cmd(int a,int b) {
// return a>b;
//}
//int main() {
// int num[6]= {1,2,4,7,15,34};
// sort(num,num+6); //按从小到大排序
// int pos1=lower_bound(num,num+6,7)-num; //返回数组中第一个大于或等于被查数的值
// int pos2=upper_bound(num,num+6,7)-num; //返回数组中第一个大于被查数的值
// cout<<pos1<<" "<<num[pos1]<<endl;
// cout<<pos2<<" "<<num[pos2]<<endl;
// cout<<endl;
// sort(num,num+6,cmd); // !!!两部技巧!!greater //按从大到小排序
// int pos3=lower_bound(num,num+6,7,greater<int>())-num; //返回数组中第一个小于或等于被查数的值
// int pos4=upper_bound(num,num+6,1,greater<int>())-num; //返回数组中第一个小于被查数的值
// cout<<pos3<<" "<<num[pos3]<<endl;
// cout<<pos4<<" "<<num[pos4]<<endl;
// return 0;
//#include<functional>//因为用了greater<int>()
//
//int main() {
// int a[]= {3,1,4,2,5};
// int len=sizeof(a)/sizeof(int);//这里切记要除以sizeof(int)!
// sort(a,a+len,greater<int>());//内置类型的由大到小排序
// for(int i=0; i<len; i++)
// cout<<a[i]<<" ";
// //scanf不能读取空串回车串。。会一直回车无效!!!
// //必须使用其他!!!get会接受回车 为空串!
// //同理getline
// //scanf也可以加个 %【^\n】表示以\n结尾 这个时候很厉害,就跟输入int一样,连续的就进
// //也可以用单位, while(s【i】 = getchar()!=‘\n’) i++;
// // s【i】 = ‘\0’;
// char s[100];
方法1
// gets(s);
方法2
// scanf("%[^\n]", s);
方法3
// int i = 0;
// while((s[i]=getchar())!='\n') i++;
// s[i]='\0';
方法4
// cin.getline(s,100);
// bool vis[600]={false};//可以
//memset 对-1 0使用 多看正规书,别乱看博客
//二维数组初始化
int a[100] = {0};
//int a[10000][10000] = {0};
//int main() {
for(int i =0;i < 100;i++){
printf("%d ",a[i]);
}
// for(int i = 0;i<10000;i++){
// for(int j=0;j < 10000;j++){
// printf("%d ",a[i][j]);
// }
// }
//struct t {
// int a;
// bool b;
//} T[1010];
//int main() {
//
// for(int i = 0; i < 50; i++) {
// t test1;
// printf("test-2 %d %d\n",test1.a,test1.b);
//
// }
// // 直接t定义
// //直接T
// for(int i = 0; i < 1010; i++) {
// printf("test-1 %d %d\n",T[i].a,T[i].b);
// }
//struct t { //最好还是初始化一下,比较保险,如果结构体的值,有需要一个初始值的话,没有覆盖输入,
见p 120实战
// int name[15];
// char password[15];
// bool flag;
//} T[10];//可见这种形式的都是有初始化,只不过为甚name也有初始化???
//int main() {
// //!!!!!!!!!!!!!!!
// t tt;
// t tt1;//这种形式的一定要初始化
// t tt2;
// t tt3;
// t tt4;
// t tt5;
// t tt6;
// printf("name %d\n",tt1.name[5]);
// printf("%d\n",tt1.flag);
// printf("name %d\n",tt2.name[9]);
// printf("%d\n",tt2.flag);
// printf("name %d\n",tt.name[10]);
// printf("%d\n",tt.flag);
// printf("%d\n",tt3.flag);
// printf("%d\n",tt4.flag);
// printf("%d\n",tt5.flag);
// printf("%d\n",tt6.flag);
// for(int i =0; i < 10; i++) {
// for(int j = 0; j < 15; j++)
// printf("%d ",T[i].name[j]);
// printf("%d flag bool\n",T[i].flag);
// }
// int a[100];
// for(int i=0;i <100;i++){
// printf("%d",a[i]);
// }//main栈内的指针值也得初始化!!!!
//char 和 string 不停读入的方式已经 begin与size的区别
//以及get的方式 都可以c【i】
// int num = 0;
string c;
while(getline(cin,c)) {
//getline()这个函数是可以读取空格,
//遇到换行符或者EOF结束,但是不读取换行符的
sort(c.begin(),c.end());
// sort(a.begin(),a.end());
for(int i =0; i<c.size(); i++)
printf("%c",c[i]);
printf("\n");
}
//
// char c[220];
// while(cin.getline(c,220)) {
// //getline()这个函数是可以读取空格,
// //遇到换行符或者EOF结束,但是不读取换行符的
// sort(c,c+strlen(c));
// // sort(a.begin(),a.end());
// for(int i =0; i<strlen(c); i++)
// printf("%c",c[i]);
// printf("\n");
// }
struct t { //最好还是初始化一下,比较保险,如果结构体的值,有需要一个初始值的话,没有覆盖输入,
//见p 120实战
int name[15];
char password[15];
bool flag;
t(){
memset(name,0,sizeof(name));
memset(password,0,sizeof(password));
flag = 0;
}
} T[10];//可见这种形式的都是有初始化,只不过为甚name也有初始化???
int main() {
//!!!!!!!!!!!!!!!
t tt;
t tt1;//这种形式的一定要初始化
t tt2;
t tt3;
t tt4;
t tt5;
t tt6;
printf("name %d\n",tt1.name[5]);
printf("%d\n",tt1.flag);
printf("name %d\n",tt2.name[9]);
printf("%d\n",tt2.flag);
printf("name %d\n",tt.name[10]);
printf("%d\n",tt.flag);
printf("%d\n",tt3.flag);
printf("%d\n",tt4.flag);
printf("%d\n",tt5.flag);
printf("%d\n",tt6.flag);
// for(int i =0; i < 10; i++) {
// puts(T[i].password);
// }
}
// //向上取整的方法 证明书的错误
// int a = (int)(3.6);
// int b = round(3.4);
// int c = round(3.5);
// int d = round(3.5);
// int e = round(3.3) + 0.5;
// int f = round(3.9) + 0.5;
// printf("%d\n",a);
// printf("%d\n",b);
// printf("%d\n",c);
// printf("%d\n",d);
// printf("%d\n",e);
// printf("%d\n",f);
//默认为0;
// struct t {
// char name[15];
// char password[15];
// bool flag;
// };
// t tt;
// t tt1;
// t tt2;
// printf("%d",tt1.flag);
// printf("%d",tt2.flag);
// printf("%d",tt.flag);
//单个字符比较
// char M[18] = {'1' ,'0' ,'X' ,'9' ,'8' ,'7' ,'6' ,'5' ,'4' ,'3','2'};
// printf("%d",M[1]=='1');
//strcpy后要加\0
// char a[81];
// cin.getline(a,81!!!!);
//字符串比较 3333不是222
//char a [3][10] = {
// "hello",
// "iam",
// "iam"
//};
//if(strcmp("hello",a[0]) == 0) printf("dui");
//printf(" %s",a[0]);
//
//1和0
// bool a = true;
// int aa = a;
// bool b = false;
// int bb = b;
// cout<<aa<<" "<<bb<<endl;
// //sscanf只能分两次截取,不可以写在一起
// sscanf(T_y,"%d",&a_y);
// sscanf(T_m,"%d",&a_m);
//正则表达式
//char buffer[] = "2423|dfgdfg|329234";
//char str1[20], str2[20], str3[20];
//sscanf(buffer, "%[^|]|%[^|]|%s", str1, str2, str3);
// printf("%s\n%s\n%s\n", str1, str2, str3);
// char str[100];
// char buf1[100];
// char buf2[100];
// char buf3[100];
// int test;
// strcpy(str, "123456abcdedfANDFS");
// sscanf(str, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3);
// printf("%s\n%s\n%s\n", buf1, buf2, buf3);
// sscanf(str, "%[0-9]%[a-z]%[A-Z]", test, buf2, buf3);
// printf("%s\n%s\n%s\n", test, buf2, buf3);
// //只能正则 对于字符串,,int不行
// char c;
// scanf("%c",&c);//接受空格
struct s {
char n[20];//直接浅拷贝
char nn[2][3];
int a;
int b;
int c;
} mmin,mmax,temp;
int main() {
mmax.a = 0;
mmax.b = 0;
mmax.c = 0;
for(int i = 0; i < 2; i++) {
strcpy(mmax.nn[i],"ab");
}
mmin.a = 24;
mmin.b = 21;
mmin.c = 21;
mmin = mmax;
printf("%d %d %d\n",mmin.a,mmin.b,mmin.c);
puts(mmin.nn[0]);
puts(mmin.nn[1]);
}
// int i = 2 > 1;
// cout<<i<<endl;
// i = 1 > 2;
// cout<<i<<endl;
// i = 1 > 1;
// cout<<i<<endl;//过 2>1返回值只有1 0 没有-1,即只有大于跟不大于
// bool a = 1;
// bool b = -1;// 返回1,因为非0都为true,不
// bool c = 0;
// cout<<a<<endl;
// cout<<b<<endl;
// cout<<c<<endl;