第3章 数组和字符串
3.1 数组
1.在算法竞赛中,常常难以精确计算出需要的数组大小,数组一般会声明得稍大一些。在空间够用的前提下,浪费一点是不会有太大影响。
2.比较大的数组应尽量声明在main函数外,否则程序可能无法运行。
3.整型数组a复制k个元素到数组b,memcpy(b,a,sizeof(int)*k。
- 浮点型数组复制,memcpy(b,a,sizeof(double)*k)。
- 需包含头文件string.h。
- 全部复制,memcpy(b,a,sizeof(a))
4.开灯问题
- memset(a,0,sizeof(a))的作用是把数组a清零,在string.h中定义
- 练习
5.蛇形填数
- 四个方向遍历的代码
- 潜在bug,如果越界,x+1会等于n,但由于短路不会造成后面a[x+1][y]访问非法内存。
- 练习
3.2 字符数组
1.竖式问题
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合,输出所有竖式。每个竖式前都应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。
样例输入:
2357
样例输出:
<1>
..775
X..33
------
25575
- scanf("%s",s),读入字符串
- printf输出到屏幕,fprintf输出到文件,而sprintf输出到字符串
- strlen(s),获取字符串s的实际长度
- strcpy(a,b),赋值。strcmp(a,b),比较。strcat(a,b),连接。
- 滥用++、--、+=等可以修改变量值的运算,建议每条语句最多只有一次这种运算符,并且所修改的变量在整条语句中只出现一次。
3.3 竞赛题目选讲
例3-1 TeX中的引号
- scanf("%s")输入字符串,碰到空格或者TAB就会停下来。
- fgetc(fin),读取一个打开的文件fin,读取一个字符,然后返回一个int值。
- fgets(buf, maxn, fin) ,读取完整的一行放在字符数组buf中。
例3-2 WERTYU