- 博客(54)
- 收藏
- 关注
原创 python内置函数之range(描述及运用)
描述range从字面意思理解即区间,range的函数原型是range(start,stop,step)顾名思义,该区间从start开始走,到stop停止(准确的说,是在stop的前一步停止,因为range是一个半开半闭的区间),每一步的步长是step。比如说:range(1,5,1),表示从1开始每一步的步长是1,用区间表示就是[1,2,3,4],如果步长是2,那么就是[1,3],注意这里是没有5的。我们可以打印一下看看range函数,也可简写为range(stop),只写明结束的位置,开始的位
2020-05-25 15:02:58
4017
原创 日期计算器
项目分析:在实现日期计算器的时候,主要用到日期类去完成,再用MFC去做上一个界面,在做项目调研的时候,本来打算用C#来进行项目的编写,发现C#的工具中有下拉列表,要完成日期计算器只用四行代码就能完成,后来就用了MFC取完成了这个项目。日代码实现:
2017-10-18 13:15:24
1997
原创 求一个数的次方
运行结果: (注:在测试整数的时候按三位有效数字输出的,最后测试小数的时候,三位会显示不出来准确结果,所以改为以八位有效数字输出)总结:在计算机中,比较两个小数的时候不能直接用等于号去判定,这样会存在很大的误差,所以我们写了一个equal函数,去判断底数是不是为0,把底数控制在一个很小的范围之内,如果在那个范围则认为底数等于0,最后直
2017-09-05 15:26:56
738
原创 Date类的实现
代码实现#include#includeusing namespace std;class Date{public:Date(int year = 1990, int month = 10, int day = 10){if (!((year > 0) && (0 {_year = 1990;_month = 10;_day = 10
2017-09-04 07:00:28
583
原创 实现二分查找(指针和数组)
指针实现:int research(int *a, int key, int length){assert(a);int *p = a;int *b = p + length - 1;while (b >= p){int c = (b - p) / 2;if (*(p + c) == key)return key;else if (*(p + c)
2017-09-03 22:38:04
1599
原创 Linux的centos6.5版本的汉字输入
在学习Linux的时候,一直输入的是英文,想输入汉字一直输入不了,就研究了一下。第一步:首先要切到root下,操作:su 回车,然后输入密码,在回车第二步:输入命令yum install "@chinese Support"第三步:开始下载了,在下载过程中出现(y/N)的选项的时候,输入y就好。第四步:当显示complete!,即为已经下载好,接下来点开左上角的system->pr
2017-08-20 11:52:11
676
原创 牛客网牛牛求最长DNA片段的编程题
牛牛从生物科研工作者那里获得一段字符串数据s,牛牛需要帮助科研工作者从中找出最长的DNA序列。DNA序列指的是序列中只包括'A','T','C','G'。牛牛觉得这个问题太简单了,就把问题交给你来解决。例如: s = "ABCBOATER"中包含最长的DNA片段是"AT",所以最长的长度是2。 输入描述:输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 50),字
2017-08-18 17:07:54
962
原创 牛客网牛牛换瓷砖的编程题
牛牛喜欢彩色的东西,尤其是彩色的瓷砖。牛牛的房间内铺有L块正方形瓷砖。每块砖的颜色有四种可能:红、绿、蓝、黄。给定一个字符串S, 如果S的第i个字符是'R', 'G', 'B'或'Y',那么第i块瓷砖的颜色就分别是红、绿、蓝或者黄。牛牛决定换掉一些瓷砖的颜色,使得相邻两块瓷砖的颜色均不相同。请帮牛牛计算他最少需要换掉的瓷砖数量。输入描述:输入包括一行,一个字符串S,字符串长度len
2017-08-18 11:56:24
761
原创 在VS和Linux下逆序打印单链表(递归和非递归)
关于思路:在打印单链表的时候,这个链表首先是得有东西的,所以首先得用头插或者尾插,在插入节点的时候,我们传入的值,光给值的话,无法真正把结点插进去,所以还应该有创建节点的操作,另外,逆序打印,我们有两种办法,一种是递归的办法,另一种是非递归的办法(用栈来实现,先 让结点入栈,在出栈,出栈顺序正好就是逆序的,用这个办法可以降低时间复杂度)关于代码:头文件:#include#inc
2017-08-17 15:22:56
347
原创 实现斐波那契数列(跳台阶问题)
1,1,2,3,5,8,13...这种除前两项外,其他项是前两项之和的序列叫做斐波那契数列关于思路:首先根据斐波那契数列的性质我们可以想到用递归去实现它,但递归的效率很低,所以我们可以采用非递归的办法,用三个变量来回的转换从而实现斐波那契数列关于代码:递归:int fun(int n) { if (n return 1; else { ret
2017-08-17 12:32:01
535
原创 查找旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,6,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.关于思路:1.寻找一个数组中的最小的数字,可以直接遍历整个数组。2.我们应该抓住两点,首先这个数组本来是递增的,那么我完成一次旋转以后,数组的内部可以看成是两个递增的数
2017-08-16 22:20:11
285
原创 实现一个函数把每个空格替换成20%
实现一个函数,把字符串中的每个空格替换成“20%”,例如输入“We are happy”,则输出“We20%are20%happy”关于思路:首先20%中一共有三个字符,而空格只占一个空格,所以每替换一个空格,字符串的长度就会比之前多两个,所以我们可以根据这个计算出替换后的字符串的长度,另外我们还应判断替换后的长度是否在容量范围之内。关于代码:#define MAXSIZE 20
2017-08-16 17:00:15
750
原创 在一个二维数组中查找一个数,这个数组的行和列都是以递增形式存储的
关于思路:由于这个二维数组的行和列是以递增形式存储的,也就是说,对行而言从左往右依次增大,对列而言从上往下依次增大。所以我们可以选取二维数组最右上角的那个元素开始访问,因为该位置上的元素,这一行往前都是比它小的,这一列,往下都是比它大的。当我们拿它跟所要找的元素对比之后,我们可以缩小要找元素的范围,这样一步步的缩小范围就能确定要查找的这个数在不在这个二维数组中了。关于代码: 关于结
2017-08-15 21:37:22
962
1
原创 找出数组中的一个元素出现次数大于数组长度的一半的元素,若不存在返回0
关于思路:在解决这个问题的时候,如果一个元素出现次数大于数组长度的一半,那么该元素出现的次数比其它所有数字出现的次数还要多,若数组中的第二个数和第一个数一样,我们可以选择来遍历数组,记下数和出现的次数; 遍历到下一个数的时候,如果与前一个数一样,则给次数+,,否则-,当次数为0 的时候,我们就要保存下一个数,并把次数置1 。因为所要找的元素比其它所有数字出现的次数多,所以要找的数字是最后一次把
2017-08-15 16:59:20
1215
原创 C++ 操作系统 部分笔试选择题总结
1.假如在一个函数中有一下代码()void fun(){ int * p = (int*)malloc(sizeof(int)); int * q = p;}A. p指向的空间在堆上,q指向的空间在栈上B. p指向的空间在栈上,q指向的空间在堆上C. p指向的空间在堆上,q指向的空间在堆上D. p指向的空间在栈上,q指向的空间在栈上答案:D
2017-08-15 14:15:02
1656
原创 模拟实现memcpy和memmove函数
模拟实现memcpy思路:memcpy函数可以实现拷贝功能,但是不能处理有目的和源有内存重叠的情况,后面会举例看到。另外还要考虑特殊情况,指针判空,还有所要使用的变量是否合法,都要进行判断。代码://模拟实现memcpyvoid my_memcpy(int*p,int*pstr,int i,int length) //i是所要拷贝的字节数,length是目的的长度。{i
2017-08-10 14:39:54
360
原创 模拟实现atoi和itoa函数
模拟实现atoi思路:atoi函数,实现字符串到数字的转换,例如,将“1111”转成数字就是1111,在转的时候我们可以定义一个指针,随着指针的后移,把字符串的每一个字符,依次转成数字,另外还需注意,负号和空格问题,在代码中都应该考虑到。代码://模拟实现atoilong my_atoi(char*p){int flag = 1;long number = 0;
2017-08-09 17:43:26
592
原创 剑指offer之字符串左旋右旋问题
右旋关于思路:1.右旋就是把字符串的前几个字符放到字符串的后面,首先,可以根据要旋转的数量,把字符串分成两部分。2.第一部分进行翻转,第二部分进行翻转。3.整体翻转例如:abcdefgh 若要翻转前两个,首先把字符串分为 ab cdefgh ,然后 翻转ba hgfedc ,最后整体翻转得到cdefghab关于代码://将N个字符的数组,循环左移K位 voi
2017-08-08 20:26:41
385
原创 剑指offer之翻转单词顺序(翻转句子,但组成句子的单词内部有序)
翻转单词顺序关于思路:在翻转的时候,我们可以这么做,首先把整体进行翻转,例如,要反转I love you 第一步:整体翻转成ouy evol I; 第二步:分别翻转单词内部顺序: you love I关于代码#include#includevoid reserveS(char* start,char* end){if (
2017-08-08 16:56:30
333
原创 mem函数系列及举例
memsetmemset(void*s ,int ch,size_t n);函数解释:将s的前n个字节用ch替换并返回s。分析:我们通过上面的例子,就可以看到字符0和数字0的区别,当用数字0替换的时候会把数字0转义成斜杠0,所以第一个例子中,当我们把前五个字节换成数字0 的时候,转译成斜杠0,斜杠0是字符串结束的标志,所以什么都不输出。第二个我们用字符0
2017-08-08 14:34:26
6358
原创 Shell 彩色进度条
1 #!/bin/bash 2 3 index=('|' '/' '-' '\\') 4 bar='' 5 i=0 6 colour=42 7 while [ $i -le 100 ] 8 do 9 printf "[%-100s][%d%%][%c]\e["$colour"m\e[32m\e[:m\r" "$bar" "$i" "${index[$i %
2017-07-11 16:45:13
282
原创 shell脚本之$(),单引号和eval的区别
shell脚本的符号单引号单引号几乎所有内容都取其字面意思,当成字符串直接输出。$()$()先执行该命令,再把结果替换到符号所在地输出结果:分析:()里面跟c语言的语法一致,可以执行加减乘除的操作,计算出来的结果付给sum,最终将sum的值输出。eval用法:1.通过eval创建指向变量的指针分析:ptr先指向的是x,值为100,
2017-07-03 12:38:10
462
原创 计算机网络之poll
poll使用了一个pollfd的指针来实现,pollfd结构包含了要监视的event和要发生的event,且pollffd并没有最大数量限制。poll返回后,需要轮询pollfd来获取就绪的描述符。代码 1 #include 2 #include 3 #include 4 5 int newpoll() 6 { 7 struct pollfd
2017-06-30 17:07:56
691
原创 I/O多路转接之select
在I/O中,I/O需注意(1)是否有读事件发生 (2)是否有写事件发生 (3)是否有异常事件 进而写出如下代码select_server.c 1 #include 2 #include 3 #include 4 #incl
2017-06-30 16:39:43
232
原创 计算机网络基于UDP的服务器和客户端
UDP和TCP所不同的是,由于UDP是无连接的,所以就不用监听listen和accept这两个步骤,比起TCP 就显得简单了很多。另外,UDP当中收发数据,发的是数据报,收必须以数据报收回。Userver.c #include #include #include #include #include
2017-06-26 17:04:59
572
原创 计算机网络中基于TCP服务器与客户端通信
在写基于TCP服务器端的时候,主要分为 以下几步来完成1.创建套接字2.将本地地址与一套接口绑定3.创建一个套接口并监听申请的连接4.在一个套接口接受一个连接server.c#include#include#include#include #include #include#includestatic void Usage(const cha
2017-06-26 10:44:06
964
原创 计算机网络中的端口号
端口号一.使用端口号的原因:在网络通信中,由于进程的创建和撤销都是动态的,通信的一方无法识别对方机器上的进程,往往需要利用目的主机提供的功能来识别,为了解决这个问题,我们在运输层使用协议端口号也叫端口号。二.软硬件端口号软件端口:在协议栈层间抽象的协议端口是软件端口,是应用层的各种协议进程与运输实体进行层间交互的一种地址。硬件端口:硬件端口是不同硬件设备进行交互的接口。在UDP
2017-06-14 14:35:05
3161
原创 NAT和代理服务器
NAT是什么NAT(Network Address Translation)意思是“网络地址转换”,它 允许一个整体机构以一个公用IP地址出现在Internet上,也就是说,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(网关是一个网络连接到另一个网络的“关口”,由于实现网络互连)处
2017-06-14 08:37:29
406
原创 CRC校验,ARP协议及ARP抓包
一 CRC校验(1)是什么在实际的通信链路中,比特在传输过程中会出现差错,比如说1变成了0,0变成了1.我们把这种现象叫做比特差错。传输错误的比特占所传输比特总数的比率称为误码率(bit error rate).因此,为了保证数据传输的可靠性,计算机在传输数据的时候会进行差错检验,在数据链路层使用较为广泛的就是循环冗余检验(CRC)。(2)如何算我们在发送一个数据X的时候,先把数据
2017-06-11 23:39:01
1656
原创 守护进程
守护进程概念守护进程是在后台运行的一种特殊进程,Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互,其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时中缀,但系统服务进程不受用户登录注销的影响,他们一直在运行着,这种进程叫守护进程。我们用命令ps axj来查看进程,其中TPGID为1的就是我们的守护进程。守护进程的创建我
2017-06-09 17:20:13
333
转载 gdb调试多进程多线程
1. 默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。 follow-fork-mode detach-on-fork 说明parent
2017-06-06 14:54:51
335
原创 linux下的gdb调试
在看gdb调试多线程多进程之前,我们先来回顾一下gdb调试的一些基本命令首先vim一个文件,然后进行编译用命令 gcc -o test(所要生成的文件) test1(你刚刚写的文件) -g ,检查没有问题后,再gdb test对你写的文件进行调试。进入gdb后,有这些命令可以用:b + 行号 表示在哪一行打了断点info b 可查看断点的
2017-06-06 14:50:05
293
原创 进程组 作业及会话
进程组 每个进程组有 一个唯 一的进程组ID,就跟进程有自己唯一的一个进程ID一样。每个进程除了有自己的进程ID外,还会属于一个进程组,一个或多个进程的集合称为一个进程组。它们与同一作业作业相关联。只要进程组中有一个进程存在,那么这个进程组就是存在的(之前说过一个进程也能称为一个进程组)2.作业Shell分前后台来控制的不是进程而是作业或者进程组。一个前台作业可以由
2017-06-05 21:34:34
353
原创 简易迷宫
#include#include#includeusing namespace std;//#define _CRT_SECURE_NO_WARNINGS#define row 5#define col 5struct pos{ int _row; //行 int _col; //列};void map(int *a){ int j = 0;
2017-05-21 16:40:52
370
原创 二叉树的基本操作及部分面试题
#include#includeusing namespace std;#include#includetemplatestruct BinaryTreeNode{ BinaryTreeNode(const T& data)//结点 : _data(data) , _pLeft(NULL) , _pRight(NULL) {} T _data;
2017-05-21 16:38:00
474
原创 C++之多态
概念:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。多态类别(1)静态多态:静态多态通过函数重载和泛型编程实现,编译器在编译期间完成。(2)动态多态:(也叫动态绑定)动态多态则通过虚函数来实现,在程序执行期间进行。被关键字virtual修饰的成员函数叫虚函数,当基类中有虚函数时,派生类要重写虚函数,以此来实现动态 绑定
2017-03-21 22:31:33
332
原创 Linux中的信号量(上)
信号量: (1)信号量的本质是⼀ 个具有原子性的计数器,用来保护临界资源。 (2) 它本⾝只是一种外部资源的标识。信号 量在此过程中负责数据操作的互斥、同步等功能。 当请求一个使⽤ 信号量来表⽰示的资源时,进程需要先读取信号量的值来判断资源是否可 ⽤用。大于0,资源可以请求,等于0,⽆无资源可用,进程会进入睡眠状态直⾄至资源可用。 (3)信号量分为二元信号量和多元信号量。二元
2017-03-15 15:35:18
397
原创 atexit函数和粘制位问题及file
atexit函数的调用函数名: atexit头文件:#include功 能: 注册终止函数(即main执行结束后调用的函数)exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。为了验证我们来注册三个函数,看看输出结果:运行结果:结果分析,我们在调用的时候先调用的是funtest1(),然而我们从打印解过来看,他是最
2017-03-08 16:33:06
400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人