优秀代码
数组的复制
数组a复制k个元素到数组b
memcpy(b, a, sizeof(int) * k);
=> int
类型数组
memcpy(b, a, sizeof(double) * k);
=> double
类型数组
……(其余数组类似)
数组a全部复制到数组b
memcpy(b, a, sizeof a);
避免输出多余空格
for(int i = 0; i < n; ++i) printf("%s%d", i ? " ":"", a[i]);
字符的查找
char s[20], buf[20]
strchr(s, buf[i])
找到了返回字符所在位置的地址, 没找到返回NULL;
读取整行
char s[maxn];
fgets(s, 20, stdin);
判断字符属性 ctype.h
isalpha
判断是否为字母, isdigit
判断是否为数字字符, isprint
判断是否为可打印字符, toupper
转大写操作, tolower
转小写操作。
编码小技巧
- 在算法竞赛中,常常难以精确计算出需要的数组大小, 数组一般会声明的稍大一些。在空间够用的前提下,浪费一点不会有太大的影响。
- 较大的数组应该在函数外声明,否则程序会因爆栈而无法运行。
- 很多情况下, 最好在做一件事情之前, 先把所有的限制条件想清楚再去作答, 因为一旦写完了这一块,后面整体看的时候改bug是非常麻烦的。
char s[maxn]; scanf("%s", s);
遇到空白字符就会停下来。