![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 78
lc_29503203
这个作者很懒,什么都没留下…
展开
-
剑指offer--空格的替换
在学习文件操作的过程中遇到过这样一个问题,比如说我在文件中输入“hello world,10,60.0”,想在屏幕上将其打印出来,然而结果并不是想象中的那样...#define _CRT_SECURE_NO_WARNINGS 1#include #include void test2(FILE *pf){ char buf[20] = {0}; int d = 0; float原创 2016-08-11 10:31:20 · 311 阅读 · 0 评论 -
二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1,因此输入9时,该函数输出为2.1.看到这个题首先我们可能会想到的是通过不断进行移位操作来判断二进制最右边的一位是否为1,是则count++;如下代码所示:int NumberOf1(int n) { int count=0; while(n) { if(n&1) { count原创 2017-05-23 19:37:29 · 300 阅读 · 0 评论 -
旋转数组的最小数字
最近看了剑指offer上的这样一道题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。note:给出的所有元素都大于0,若数组大小为0,请返回0。1. 分析:对于这样一道题,遍历一遍就能找出数组中最小的那个,但是时间复杂度为原创 2017-05-22 20:14:15 · 598 阅读 · 0 评论 -
剑指offer之字符串转换为数字
在剑指offer里第49道题的要求是把字符串转换成整数,在这种情况下肯定是不能用像atoi这样的库函数的哦,所以我们就得模拟实现这个函数来解决面试官所给的问题。很多人可能会一下啊就写出这样的代码:int my_atoi(const char *str){ int number=0; assert(str); while(*str) { number=number*10+*str-原创 2016-05-22 20:45:26 · 1195 阅读 · 1 评论 -
部分库函数的功能分析及模拟实现
库函数能提供给我们最显著的作用就是提高工作效率,在我们初学阶段使用库函数来实现一些简单的算法其实是很常见的,那么了解一些库函数的功能及其实现过程就很有必要了。首先我们来看看strcmp和strncmp的用法和区别:函数名:strcmp原 型: int strcmp (const char *s1, const char *s2) 功 能: 这个函数用来比较s1和s2字符串原创 2016-04-21 21:11:39 · 502 阅读 · 0 评论 -
有关指针,数组和函数的一些联系
当我们看见指针数组,数组指针还有函数指针...是不是感觉有点晕呐,在写程序的时候感觉脑袋里也没什么严格的区分,有Debug的时候一调试就ok,但是这样效率低呀,况且在别人问你的时候讲不清楚是不是感觉很尴尬,所以清晰地理解和区分它们还是相当有必要的。这里整理如下:数组指针和指针数组int (*p)[n]; //数组指针理解:a.()优先级高,首先说明p是一个指针,指向一个整原创 2016-04-26 20:22:51 · 549 阅读 · 1 评论 -
有趣的字符查找函数模拟strstr和strrstr,strchr和strrchr
标准库中存在许多函数,它们用各种不同的方法查找字符串,像strstr,strchr和strrchr等等.这些各种各样的工具给了c程序员很大的灵活性,为了更好地了解它们的作用,下来我们将它们一一模拟实现。原创 2016-05-07 18:20:20 · 1177 阅读 · 0 评论 -
剑指offer之数组的调整及在杨氏矩阵中的查找
1.调整数组使奇数全部都位于偶数前面。题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。首先分析一下:看到这样一个题目,我们是不是会联想到很多类似的问题,比如说给你一个数组,让你交换使 其负数在前,正数在后;或者是使一个数的倍数在前,另一个数的倍数在原创 2016-05-09 11:57:58 · 600 阅读 · 0 评论 -
通讯录的文件版本
#ifndef __CONTACT_H__ //防止被重定义#define __CONTACT_H__#include #include#include enum OP{ EXIT, ADD, DEL, MODIFY, SEARCH, DISPLAY, SORT, CLEAR};#define NAME_MAX 20#define SEX_MA原创 2016-05-20 22:49:43 · 851 阅读 · 1 评论 -
通讯录的静态实现
实现一个通讯录:通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人首先我们采用顺序表的方式来实现一个通讯录,顺序表就是一种静态的模式。但是呢,静态的方原创 2016-05-21 09:01:21 · 961 阅读 · 0 评论 -
通讯录的动态实现
Contact.h#define _CRT_SECURE_NO_WARNINGS 1#ifndef __CONTACT_H__ //防止重定义#define __CONTACT_H__#include #include #includeenum OP{ EXIT, ADD, DEL, SEARCH, MODIFY, DISPLAY, S原创 2016-05-21 10:23:35 · 834 阅读 · 0 评论 -
小项目之注释的转换
这个小项目是实现将c语言的注释风格转换为c++的注释风格,那么我们首先得明确它们的注释风格是什么。c语言的注释风格是:/* */c++的注释风格是://首先分析一下我们在转换的时候应该有哪几种状态:第一种NUL_State:空状态第二种C_State: C语言状态第三种CPP_State: C++状态第四种END_State:结束状态下来我们采用枚举原创 2016-05-24 18:42:59 · 446 阅读 · 0 评论 -
动态顺序表的功能实现
在了解线性结构后我们知道它可分为顺序表和链表两种,而顺序表又分为静态顺序表和动态顺序表.静态顺序表和静态通讯录的实现极为相似,但是我们知道静态版本有着明显的缺陷,空间分配太大易造成浪费,太小又不便存储,而动态版本正好可以解决这个问题。 既然前面提到线性结构的组成,那么我们就在说说链表分为哪些:它可分为单向链表,双向链表,循环链表和双向循环链表,这些我们后期再讨论这些。好了,该回原创 2016-06-02 09:37:17 · 786 阅读 · 0 评论 -
排序算法——冒泡的优化
一提起冒泡排序,可能大家会很快写出这样的代码:#include#include#includevoid BubbleSort(int *str,int len){ int i=0; int j=0; int tmp=0; assert(str); for(i=0;i<len-1;i++) //控制比较的趟数 { for(j=0;j<len-原创 2016-06-03 22:07:44 · 404 阅读 · 0 评论 -
排序算法——直接插入法排序
直接插入法排序,对于这样一个问题我们该如何很好的去理解它呢?相信很多人对扑克牌应该很熟悉,当你拿到带有数字5 4 6 9 7 8这样几张牌的时候肯定会自然而然的将4向5的左侧1移动(4 5 6 9 7 8),将7往9的左侧移(4 5 6 7 9 8),再将8向9移动(4 5 6 7 8 9),这个移动的过程就是直接插入法排序。如果还不是太明白的话可以通过下图进一步的理解:下来我们再将直原创 2016-06-08 22:56:25 · 1128 阅读 · 0 评论 -
排序算法——选择排序
选择排序是这样定义的:通过n-i次关键字间的比较,从n-i-1个记录中选出关键字最小的记录,并和第i个(1这样吧,举个例子来进一步理解一下:比如说,6 5 4 3 2 1 排序后使其升序(1)首先将6看作有序,在后面选一个最小的数与6交换,这次排完后变成1 5 4 3 2 6;(2)这次将1 5 看作有序区,后面最小一个为2,5与2交换,排完后变成1 2 4 3 5 6;(3)现在原创 2016-06-09 17:57:59 · 359 阅读 · 0 评论 -
链表之单链表的合并
合并两个链表,顾名思义至少得有两个链表,比如说:链表1:0->2->4->7->9->over ; 链表2:9->3->5->8->over,要想合并这两个链表我们需要注意哪些问题呢?我们至少需要考虑以下几个问题:(1)对于其中有一个链表为空这种问题还是比较好处理得,直接返回不为空的那个链表就可以了;(2)如果两个链表均不为空,合并时我们该如何处理呢?最简单的一种解决办法是:原创 2016-06-10 17:29:20 · 382 阅读 · 0 评论 -
线性表的链式存储结构
在顺序结构中,它最大的缺点就是插入和删除时需要移动大量元素,这显然要耗费时间,后来发现链式存储结构恰好能解决这个问题。以前在顺序结构中,每个数据元素只需要存数据元素信息就好了,现在链式结构中除了要存数据元素信息外,还要存储它的后继元素的存储地址。下来总结一些有关链式存储结构的小知识:(1)数据域:把存储数据元素信息的域称为数据域;(2)指针域:把存储直接后继位置的域称为指针域,指针域中存储原创 2016-08-09 14:22:20 · 362 阅读 · 0 评论 -
小型http服务器
为了真正理解服务器程序的本质,基于Tinyhttp服务器的基础上,实现了一个多线程http/1.0版本的小型http服务器,本文将从以下几方面介绍: (1)实现http服务器的预备知识; (2)模式处理; (3)多线程http工作的方法流程; (4)代码实现。 (注:http/1.0版本的服务器采用的是短连接,即请求-响应-断开)1.在实现http服务器之前,我们首先要了解HTTP协议,C原创 2017-04-14 22:00:31 · 1102 阅读 · 1 评论