
C语言
loreal8
学生
展开
-
Linux--select函数的使用
select函数:当有多个客户端链接上来时,一般会采用多线程的方式去处理客户端的请求交互。但是当连接上来的客户端很多的时候,多线程对于网络的开销太大了。所以就有了select这个函数,在一个程序内处理多个连接。#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select(int nfds, fd_set *readf原创 2020-07-22 18:02:03 · 177 阅读 · 0 评论 -
Linux--socket套接字相关函数的使用
套接字socket函数:创建监听套接字#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); //参数一:网络协议关键字。AF_INET,指IPV4协议 //参数二:流式套接字。SOCK_STREAM指TCP协议 //参数三:一般写0,让操作系统根据前两个参数自动匹配协原创 2020-07-22 16:35:52 · 190 阅读 · 0 评论 -
输入一个十进制的数,可以转换成任意进制(2到16)
进制转换先输入要转换的十进制数,在输入转换的几进制#include<stdio.h>//处理10以内的进制void func1(int m, int n) { int a[32] = { 0 }; int i = 0; while (m > 0) { a[i] = m % n; m = m / n; i++; } for (int j = i - 1; j >= 0; j--) printf("%d", a[j]);}//处理16进制vo原创 2020-07-04 14:34:58 · 1548 阅读 · 0 评论 -
C语言--输出这个字符串中最长的连续数字串
输出这个字符串中最长的连续数字串例如:输入:abc123hjuytfsa56789jkl输出:56789#include<stdio.h>#include<string.h>#include<stdlib.h>//输出这个字符串中最长的连续数字串void func(char* str, int size) { char* tmp = (char*)malloc(size + 1); int prev = 0; int end = 0; int i原创 2020-07-01 17:49:57 · 2750 阅读 · 0 评论 -
C++一个序列最少有几个有序子序列
一个序列最少有几个有序子序列有序子序列就是指递增或者递减的子序列#include<stdio.h>#include<stdlib.h>//一个序列最少有几个有序子序列int func(int* a, int size) { int i = 0; int cont = 0; while (i < size) { //相同往后走一位 if (a[i] == a[i + 1]) { i++; } // 递增的子序列 else if (a[i]原创 2020-07-01 17:47:40 · 1130 阅读 · 0 评论 -
Linux--生产者消费者模型,信号量和条件信号量
生产者和消费者一个生产者,三个消费者模型,利用#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#define PRO 1#define CON 3int ready = 0; // 生产的产品编号pthread_cond_t cond;pthread_mutex_t mutex;pthread_t tids[PRO+CON] ;原创 2020-06-30 21:47:37 · 176 阅读 · 0 评论 -
C语言--通讯录加强版
通讯录加强版较之前的版本新增了两个功能。1.自动扩容。2.可以写入文件和从文件中读取。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct PersonInfo { //定义一个成员结构体 ch...原创 2020-03-26 15:55:34 · 202 阅读 · 0 评论 -
C语言--关于文件知识总结
文件知识总结在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。文件名:文件名包含3部分:文件路径+文件名主干+文件后缀例如:c:...原创 2020-03-24 12:54:34 · 824 阅读 · 0 评论 -
C语言--实现strncat,strncmp函数
实现strncat,strncmp函数1.strncat:拼接n个字符,要是第二个字符串长度小于n,那就拼接完直接在后边加\0。同时还要保证第一个字符串长度足够+n。char* my_Strncat(char* destination, const char* source, size_t num) { if (destination == NULL || source == NULL) {...原创 2020-03-23 13:14:49 · 259 阅读 · 0 评论 -
C语言--通讯录系统
通讯录系统实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1.添加联系人信息2.删除指定联系人信息3.查找指定联系人信息4.修改指定联系人信息5.显示所有联系人信息6.清空所有联系人#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<s...原创 2020-03-19 16:42:32 · 388 阅读 · 0 评论 -
C语言--实现memcpy,memmove函数
实现memcpy,memmove函数1.memcpy函数: 实现内存拷贝,即不管是什么类型的数据都可以拷贝,而strcpy只可以拷贝字符串。void *memcpy(void *destin, void *source, unsigned n);前两个参数为要被填充的字符串和要被拷贝的字符串,最后一个n为拷贝多少字节,不在乎‘\0’。void* my_Memcpy(void* dest,...原创 2020-03-17 19:59:44 · 242 阅读 · 0 评论 -
C语言--实现strstr函数
实现strstr函数strstr函数:函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。const char* strstr(const char* str1, const char* str2)const char* my_Strstr(const char* str1, co...原创 2020-03-16 16:59:56 · 442 阅读 · 0 评论 -
C语言--关于结构体,位段,枚举,联合体的总结
关于结构体,位段,枚举,联合体的总结1.结构体(1)结构体变量的定义和初始化struct Point{ int x; int y;}p1; //声明类型的同时定义变量p1 struct Point p2; //定义结构体变量p2//初始化:定义变量的同时赋初值。 struct Point p3 = {x, y};stru...原创 2020-03-16 15:53:25 · 221 阅读 · 0 评论 -
C语言--模拟实现strcmp函数
模拟实现strcmp函数比较两字符串身份是不是一样,即首元素地址是不是同一个字符串。用 == 判断。比较两个字符串内容是不是一样。用 strcmp 字符串比较函数,比较字典序。 strcmp(str1,str2) 如果 str1>str2 就返回 大于0 的数。 如果 str1<str2 就返回 小于0 的数。 如果 str1=str2 就返回 0。int my_st...原创 2020-03-12 17:07:28 · 362 阅读 · 0 评论 -
C语言--模拟实现strlen,strcpy,strcat函数
模拟实现strlen,strcpy,strcat函数1.strlen:求字符串长度函数方式1:int my_strlen(const char * str){int count = 0;while(*str){count++;str++;} return count;} 方式2:int my_strlen(const char * str){if(*str == '...原创 2020-03-12 16:45:27 · 224 阅读 · 0 评论 -
指针压轴题
指针压轴题例:int main(){char *c[] = {"ENTER","NEW","POINT","FIRST"};char**cp[] = {c+3,c+2,c+1,c};char***cpp = cp;printf("%s\n", **++cpp);printf("%s\n", *--*++cpp+3);printf("%s\n", *cpp[-2]+3);prin...原创 2020-03-12 15:33:14 · 175 阅读 · 0 评论 -
指针题
指针题例1:int main(){int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));return 0; }结果:2 5解释:*(a + 1)相当于a[1]; *(ptr - 1))就是数组指针指向下一个数组,再退回一步。例2...原创 2020-03-11 22:19:03 · 392 阅读 · 0 评论 -
对于数组的习题总结
数组的总结假设全部题是在32位操作系统下。例1: int a[] = {1,2,3,4};printf("%d\n",sizeof(a)); //16printf("%d\n",sizeof(a+0)); //4 数组名隐式转成指针,指针加一个数得到还是int* ,32位系统中指针占4个字节。printf("%d\n",sizeof(*a)); //4 数...原创 2020-03-10 19:48:07 · 201 阅读 · 0 评论 -
使用回调函数实现冒泡排序
使用回调函数实现冒泡排序回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。回调方法 是 任何一个 被 以该回调方法为其第一个参数 的 其它方法 调用 的方法。很多时候,回调是一个当...原创 2020-03-05 17:12:53 · 213 阅读 · 0 评论 -
C语言--关于数据在内存中的存储总结
知识收集1.数据在内存中是以二进制码的方式存储,而当你查看的时候是16进制,因为16进制方便查看。2.正数的源码,反码,补码相同,或者可以说正数没有反码补码3.负数用二进制的第一位来代表符号位,1代表负数,0代表正数;负数的反码是符号位不变,其余位0变1,1变0;补码是在反码基础上加一,保持符号位不变。4.%d打印有符号的十进制整数;%u打印无符号的十进制整数,负数的符号位会当成有效...原创 2020-03-02 15:23:21 · 275 阅读 · 0 评论 -
C语言--压缩字符串
压缩字符串给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。示例1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]说明:"aa"被"a2...原创 2020-02-20 14:16:35 · 3431 阅读 · 4 评论 -
C语言--仅仅反转字母
仅仅反转字母给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。示例1:输入:"ab-cd"输出:"dc-ba"示例2:输入:"a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba"示例3:输入:"Test1ng-Leet=code-Q!"输出:"Qedo1ct-eeLg=ntse-T!"提示:S.len...原创 2020-02-19 23:55:50 · 886 阅读 · 0 评论 -
C语言--寻找数组的中心索引
寻找数组的中心索引给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有**元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。...原创 2020-02-19 22:15:34 · 1767 阅读 · 0 评论 -
C语言--验证回文串
验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。示例1:输入: "A man, a plan, a canal: Panama"输出: true示例2:输入: "race a car"输出: falsebool isPalindrome(char* s) { int i; int j = 0; int m = strlen(s);...原创 2020-02-19 19:58:15 · 1389 阅读 · 0 评论 -
C语言--长按键入
长按键入你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例1:输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e' 被长...原创 2020-02-19 01:16:23 · 649 阅读 · 0 评论 -
C语言--合并两个有序数组
合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素...原创 2020-02-18 13:51:32 · 11141 阅读 · 1 评论 -
C语言--最后一个单词的长度
最后一个单词的长度给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0。示例:输入: "Hello World"输出: 5int lengthOfLastWord(char * s){ int b = strlen(s); if (b == 0) { return 0; } ...原创 2020-02-18 13:36:01 · 1425 阅读 · 2 评论 -
C语言--在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:...原创 2020-02-17 12:02:38 · 3115 阅读 · 0 评论 -
C语言--加一
加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123示例:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321if (digi...原创 2020-02-17 09:50:38 · 3882 阅读 · 1 评论 -
C语言--两数之和
两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素.示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]int* ...原创 2020-02-17 09:39:17 · 1070 阅读 · 0 评论 -
C语言--第三大的数
第三大的数给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数.示例1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 ....原创 2020-02-14 13:27:53 · 2033 阅读 · 0 评论 -
C语言--按奇偶排序数组
按奇偶排序数组给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例: 输入:[3,1,2,4] 输出:[2,4,3,1] 输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。int* sortArrayByParity(int* A, int ASize, int* ...原创 2020-02-13 16:35:51 · 1669 阅读 · 0 评论 -
C语言--赎金信
赎金信给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。假设两个字符串均只含有小写字母 canConstruct("a", "b") -> false canConstruct("aa", "ab") -> fa...原创 2020-01-21 22:25:42 · 621 阅读 · 0 评论 -
C语言--搜索插入位置
搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。假设数组中无重复元素。输入: [1,3,5,6], 5输出: 2输入: [1,3,5,6], 2输出: 1输入: [1,3,5,6], 7输出: 4输入: [1,3,5,6], 0输出: 0#include<stdio.h>...原创 2020-01-18 23:39:03 · 976 阅读 · 0 评论 -
C语言--移除元素
移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。不使用额外的数组空间。#include<stdio.h>int removeElement(int* nums, int numsSize, int val) { int i, j = 0; in...原创 2020-01-15 22:48:32 · 891 阅读 · 0 评论 -
C语言--将数组内容右移
数组内容右移#include<stdio.h>void rotate(int* nums, int numsSize, int k) { int arr[10] = { 0 }; int i = 0; if (k == 0) { for (i = 0; i < numsSize; i++) { printf("%d ", nums[i]); } } ...原创 2020-01-12 23:04:45 · 2339 阅读 · 0 评论 -
C语言--银行家算法
银行家算法该算法是操作系统为了避免死锁的算法。1.实现算法的数据结构:可利用资源向量Available:这是一个含有 j 个元素的数组,其中的每一个元素代表一类可利用资源的数目。最大需求矩阵Max:这是一个 i*j 的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。分配矩阵Allocation:这是一个 i*j 的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数...原创 2020-01-10 15:57:09 · 1248 阅读 · 0 评论 -
C语言--贪心思想初级题
利用贪心算法思想解决一些小问题有一艘船,荷载100公斤,有n个人,体重不一,要过河,问船要几趟才能运完这些人。解决思路:将这些人体重排个序,每次取最小的一个跟最大的一个一起坐船,小于荷载就一起走,不小于就体重大的那个一个人走。#include<stdio.h>int main() { printf("请输入最大荷载,渡船人数,每个人的体重!\n"); int m, n; ...原创 2019-12-29 20:10:17 · 209 阅读 · 0 评论 -
C语言--指针小细节
关于指针的一些小知识点整理指针变量涉及到的两个要素 (1),指针对应的**内存地址**。 (2),指针对应地址的内存大小,用**指针类型**来体现(char*,int*等)。只关注地址,不关心指针对应内存的内容就是可以用void*。void*对应任意大小的内存,**不可以解引用**。空指针不同于void*。11 22 33 44大端字节序,**高位在左,低位...原创 2019-12-08 15:23:05 · 127 阅读 · 0 评论 -
C语言--扫雷程序
扫雷程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define row 9 //行数#define col 9 //列数#define mineNum 10 //地雷数int Menu() { printf("======...原创 2019-12-05 16:39:10 · 185 阅读 · 0 评论