1.assert宏在Linux系统下可以在release版本运行。
2.函数左旋实现
方法一:简单粗暴无理法(已知要旋的字符串是什么方可用)
利用switch语句直接算出答案。
方法二:略显聪明循环法:
通过先把第一个符号存下来,然后将后面几位一一向前进一位,再将第一位符号赋给最后一位。需要移动几次,就循环几次。
库函数法:
利用strcpy和strncat来实现这个功能,首先先来了解一下strcpy和strncat如何使用。
strcpy是“拷贝”的意思,strcpy(str1,str2);这个函数会将str2的内容全部拷给str1.
srncat是“追加”的意思,strncat(str1,str2,n;这个函数会将str2中的前两位数追加到str1后面。
于是在这题里面,我们先用temp来创造一个临时空间,用来存放我们操作步骤中的数据。
逆置旋转法:
假设我们有一个数组“ABCDEF”,我们要左旋三位,那么我们就可以先将前面三个字符先反转,再将后面三个字符反转,最后整个字符串反转。很神奇。
3.函数偶数在前,奇数在后。
一个整数数组,我们要对他进行排序,使偶数在前,奇数在后,那么我们可以从最左边的数字一路比较过来,如果是偶数,那就往后走一位,如果是奇数,就跳出循环,从右到左同理,当然,前提是左边永远在左边,右边永远是右边,保证左边不会加着加着超出数组范围,右边同理。如果,*left代表的已经是奇数,*right代表的是偶数,那么就直接对换。反复循环,直到所有偶数都在左边,所有奇数都在右边。
4.int *arr[10]和int (*arr)[10]是不一样的,前者表示的指针数组,是数组里面存放指针;后者则是表示数组指针,是一个指向数组的指针。
5.指针的大小在32位下是4位字节,在64位下是8字节。
6.当使用free释放一个指针内容后指针变量需要手动设置为NULL,不然会变成野指针。
7.寻找一个字符串是否为另一个字符串经过旋转所得
方法一就是一一列举一一比较,简单但是代码较多。
下图是方法2,利用string.h的库函数来实现。首先我们要学习一个新的库函数strstr(str1,str2),这个库函数会将str2与str1进行比较,如果在str1中找到了str2,那么就不会返回NULL,如果没找到,就返回NULL,而后面的布尔判断,使得找到了函数会return1,没找到return0.所以我们就可以利用temp作为一个中介,将str1复制两份到temp里。
8.找在矩阵数组里找数字,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
在这种题目中一一查询显然不合理,所以我们可以通过快速缩短区间,先找到右上角的数值与指定数值进行比较,要是小于指定数值就慢慢往下挪,如果大于指定数值了就往左挪,直到最终找到或没找到。
9.找凶手,
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
这题主要考验对字符的理解,题目中我们让killer++,本质上他是通过SACII值进行++,从字符‘a’开始一直加到‘d’,然后我们再将题目的条件放在if语句里,语句里面要是成立就返回1,题目说有三个人说真话,那么若是找到凶手,三条语句相加就是3,就能找出凶手了。