2024/2/19知识点

本文介绍了Linux系统下的assert宏使用,左旋字符串的方法(包括简单循环法、库函数法和逆置旋转法),以及数组排序(偶数在前,奇数在后)、指针概念(如intarr与(*arr)[10]的区别)、内存管理(free后的指针处理)、字符串操作(如旋转字符串查找和矩阵查找)、逻辑谜题(找凶手问题)等技术点。
摘要由CSDN通过智能技术生成

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,就能找出凶手了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值