自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 聊天室项目

目录聊天室项目服务器客户端聊天室项目"************************************************************欢迎来到聊天室输入log登录输入reg注册输入sto对某人讲话输入sta对大家讲话输入che查看当前在线用户输入hlp查看帮助输入tra传输文件超级用户命令: nos禁言, say解禁, out踢出在线用户输出ext退出聊天室"**************************************************

2020-06-15 12:14:22 169

原创 基于QT的即时通信系统项目(仿QQ)

目录要求要求界面要求 仿QQ (登录、注册)、(好友列表)、(聊天窗口)、 (聊天记录) 选做:群聊 功能:c/s 架构 可以使用Linux C开发服务器 登录、注册(自动生成id、 id登录) 聊天窗口(字体设置、表情) 聊天记录(可以选择日期查看聊天记录)...

2020-12-02 14:20:56 1366

原创 20. 有效的括号

#include<iostream>#include<stack>#include<string>using namespace std;class Solution{public: bool isValid(string s) { stack<char>s1; string ch; for(int i=0;i<s.size();i++) {

2020-07-27 17:39:58 141

转载 14. 最长公共前缀

class Solution {public: string longestCommonPrefix(vector<string>& strs) { if (!strs.size()) { return ""; } string prefix = strs[0]; int count = strs.size(); for (int i = 1; i < count; +

2020-07-27 16:38:11 121

原创 13. 罗马数字转整数

#include<iostream>using namespace std;class Solution{public: int romanToInt(string s) { int i=s.length()-1; int flag=0,f=0; int a=0; while(i>=0) { switch(s[i]) {

2020-07-22 17:45:54 89

原创 9. 回文数

//9. 回文数#include<iostream>using namespace std;class Solution {public: bool isPalindrome(int x) { int a[10]; int i=0; int flag=0; int b; if(x<0) return false; for(i=0;x/10!=0;i++,

2020-07-17 18:45:49 78

转载 7.整数反转

//大佬代码:方法二:class Solution {public: int reverse(int x) { int res = 0; do { if (res > INT_MAX / 10 || res < INT_MIN / 10) return 0; //溢出判定 res = res * 10 + x % 10; }while (x /= 10); re

2020-07-17 18:05:18 78

原创 c++对c的加强(九)--运行时类型信息

cast类型转换static_cast : 相关类型转换(基本类型转换,基类和派生类之间的向上向下类型转换(不做类型转换))dynamic_cast : 基类和派生类之间向上向下类型转换;类型检查;失败返回nullptr,所以可以检测是否转型成功;只能转指针,且必须有多态;reinterpret_cast : 任意类型转换;(类似于c语言强制类型转换)const_cast : 去除指针或者引用的const权限;typeidtype_info typeid(对象名/变量名);(基本用作类型筛选)

2020-05-11 16:35:48 126

转载 L1-009 N个数求和

#include <bits/stdc++.h> // 万能头文件using namespace std;typedef long long LL;//欧几里德算法 求最大公约数LL gcd(LL a, LL b){ if(a % b == 0){ return b; } else { return gcd(b, a % b); }}/* 将 a / b 与 c / d 求和 整数部分作为返回值返回

2020-05-11 16:00:40 169

原创 L1-008 求整数段和

#include<stdio.h>int main(){ int a,b; scanf("%d%d", &a,&b); int temp = a; int sum = 0; for(int i=0;i<=b-a;i++) { if(i%5==0&&i!=0) printf("\n"); printf("%5d",temp); sum += temp; temp++; } printf("\nSum = %d",sum);

2020-05-11 12:19:03 149

原创 L1-007 念数字

#include<stdio.h>#include<string.h>int main(){ char a[1024]; gets(a); for(int i=0;a[i]!=NULL;i++) { if(i!=0) printf(" "); switch(a[i]) { case '1' : printf("yi"); break; case '2' : printf("er"); break; case '3'

2020-05-11 12:03:32 111

转载 L1-006 连续因子

#include <stdio.h>#include <math.h> int main(void){ int N; int m; int len; int i,j,t; int max; long long int sum; scanf("%d", &N); max = sqrt(N); ...

2020-05-03 22:00:44 122

原创 Linux UDP网络编程

目录UDP的通信流程服务端客户端通信实例UDP的通信流程服务端socket-->bind-->recvfrom-->sendto-->closerecvfrom(接收数据)1、头文件:#include <sys/types.h> #include <sys/socket.h>2、函数原型:ssize_t recvfrom(i...

2020-05-03 16:49:42 173

原创 c++对c的加强(八)--继承

目录c++的继承继承描述继承语法声明复用实例继承规则派生类前言:封装:提高代码维护性;继承:提高代码复用性 - - 代码复用的方法:组合(has)、继承(is);多态:提高代码扩展性。c++的继承继承描述(1)A类是B类的父类,B是A的子类。(2)A类是B类的基类,B类是A的派生类。(3)继承的过程可视为拷贝。继承语法声明复用实例//组合(将一个类作为另一个类的对象成员)...

2020-05-03 16:24:27 92

原创 c++对c的加强(七)--运算符重载

目录运算符重载友元机制运算符重载运算符重载友元机制概念定义:(友元函数、友元类)(1)友元是一种允许非类成员函数访问类的非公有成员的一种机制。(2)可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。友元函数:(1)该函数不是类的一部分,但又需要频繁地访问类的数据成员。(2)友元函数在类作用域外定义,但它需要在类体中进行说明。破坏封装性,尽可能少用。(3)为与该类...

2020-05-03 16:01:56 158

原创 c++对c的加强(六)--成员函数、属性

目录成员函数、属性对私有属性添加set/get方法static 关键字const 关键字空类默认生成的成员指向类成员的指针成员函数、属性对私有属性添加set/get方法//在类中生成函数调用函数即可void setNUm(int num){ this->m_num = num;}int getNUm(){ return this->m_num;}static ...

2020-05-03 15:45:53 296

原创 c++对c的加强(五)

目录移动构造和移动赋值移动构造和移动赋值作用:对象移动,解决(临时)对象拷贝带来的开销问题。 Test getTest() //类中{ Test t(“hello world”); //在退出函数时空间自动释放 return t; //而此时又需要有返回值,就产生了临时对象} Test t1 = getTest(); //当移动构造函数未定义时...

2020-05-03 15:06:29 120

原创 Pick peaks

高赞解法注释def pick_peaks(arr): peak, pos = [], [] res = { "peaks":[], "pos":[] } for i in range(1, len(arr)) : if arr[i]>arr[i-1] : # 覆盖 peak, pos = [arr[i]], [i] ...

2020-05-02 15:49:16 202

原创 L1-005 考试座位号

源代码:#include<stdio.h>struct students{ long int numbers; int s1; int s2;}student[1000];int n;int found(int s1){ for(int i=0;i<n;i++) { if(student[i].s1==s1) return i; }}int...

2020-05-02 14:54:12 109

原创 Linux TCP网络编程

目录TCP服务器实现过程套接字socket函数绑定IP地址和端口号bind函数listen函数accept函数TCP客户端的实现过程connect函数TCP服务器实现过程创建套接字:socket函数给套接字绑定IP地址和端口号:bind函数将套接字文件描述符,从主动变为被动文件描述符(做监听准备):listen函数 主动描述符可以主动的向对方发送数据 被动描述符只能被动的等...

2020-04-23 11:32:25 179

原创 L1-003 个位数统计

目录c的源程序注意点c的源程序#include<stdio.h>#include<string.h>int main(){ char n[1000]; int a[10]={0},i; scanf("%s",n); for(i=0;i<strlen(n);i++) { if(n[i]=='-') return 0; int s = n[i]...

2020-04-09 15:32:49 87

原创 L1-002 打印沙漏

目录c源码学习点:format组成类型标志类型长度length转义序列c源码#include<stdio.h>#include<math.h>int main(){ double n; char a; scanf("%lf%s",&n,&a); int m = sqrt((n+1)/2); int n1 = n - m*m*2 + 1;...

2020-04-09 10:11:07 181

原创 Linux多线程编程

目录多线程基本使用注意此线程与主进程之间的通信多线程实例多线程进程是资源管理的最小单位,线程是程序执行的最小单位。因此我们在程序中多用线程有利于节省运行的空间和时间,更好的支持SMP以及减小(进程/线程)上下文切换开销。基本使用//多线程所需的头文件:#include<pthread.h>//创建线程id:pthread_t id;//创建线程:int pthread...

2020-04-08 18:54:09 108

原创 Linux的进程

目录进程属性进程退出进程运行进程属性多任务 vs 单任务 (并发vs并行)(调度:抢占vs非抢占)进程的特点:每个进程拥有独立的虚拟地址空间 4G(内核态:1G 用户态:3G(栈,堆,数据段(bss、or、静态数据区)))进程pid:每个进程创建都有自己的id号 getpid getppid(获得父进程的id)进程控制块(PCB):每个进程创建都会有自己进程控制块(struct tas...

2020-04-08 18:21:09 87

原创 IPC进程间通信(六)--信号(signal)

目录信号信号信号的处理有三种方法,分别是:忽略、捕捉和默认动作简单使用:sighandler_t signal(int signum, sighandler_t handler);signal函数作用1:站在应用程序的角度,注册一个信号处理函数作用2:忽略信号,设置信号默认处理 信号的安装和回复参数–signal是一个带signum和handler两个参数的函数,准备捕捉或屏蔽...

2020-04-08 18:07:26 287

原创 IPC进程间通信(五)--共享内存

目录共享内存共享内存在内存中申请一块共享区域,进程就可以通过访问这块共同区域实现数据的读和写进而实现通信。//共享内存的创建:int shmget(key_t key, size_t size, int shmflg);//成功返回shmid;失败返回-1;//shmflg: 0644 | IPC_CREAT | IPC_EXCL//连接进程:void *shmat(int shm...

2020-04-08 16:52:46 70

原创 IPC进程间通信(四)--信号量

目录信号量信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域//信号量的建立int semget(key_t key, int num_sems, int sem_flags);//成功返回sem_id; 失败返回-1;//key:ftok或IPC_PRIVATE常量//n...

2020-04-08 16:28:14 131

原创 IPC进程间通信(三)--消息队列

目录消息队列消息队列消息队列提供了从一个进程向另一个进程发送一个又类型数据块的方法。用这种方法可以避免命令管道的同步和阻塞问题。此外消息队列是基于消息的,而管道是基于字节流的,并且消息队列的读取不一定是先入先出。int msgget(key_t key, int msgflg); //失败返回-1;成功返回msqid//key:ftok生成或为IPC_PRIVATE//misfig:IP...

2020-04-08 16:09:15 141

原创 IPC进程间通信(二)--ftok

目录ftokftokftok主要运用于IPC的信号量,消息队列和共享内存。ftok把一个已知道的路径名和一个整数标识符转换成一个key_t值,又被称为IPC键值。#include<>sys/types.h>#include<sys/ipc.h>key_t ftok(const char *pathname, int proj_id)//pathname:...

2020-04-08 14:28:07 124

原创 IPC进程间通信(一)--管道

目录导论管道无名管道有名管道导论IPC(Inter-Process Communication):管道、信号、共享内存、消息队列、信息量、套接字管道管道分为:无名(匿名)管道和有名(命名)管道区别:管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特...

2020-04-07 23:24:33 123

原创 c++对c的加强(四)

类型转换的升级c语言的转换是强制型转换static_cast:类似于c语言的强制转换,保证代码的安全性和正确性,相关数据类型之间转换int a = static_cast<int>(b);char ch = static_cast<char>(a);指针之间的赋值规则:必须是相同指针类型(以确保相同步长),所以static_cast不可以转换指针的类型。voi...

2020-03-22 15:59:03 90

原创 多任务和fork()

多任务单任务 vs 多任务并发(单个CPU) vs 并行(多个CPU)进程进程的特点:每个进程都有自己独立的虚拟地址空间,大小为4G(互不干扰,相互独立)进程虚拟地址空间的构成: 栈空间:先进后出;系统管理;生命周期由所在函数决定;生命周期:局部 堆空间:先进先出;用户管理(malloc,free);用户决定;生命周期:局部或全局 数据段:系统管理;生命周期:全...

2020-03-19 15:49:00 97

原创 获取文件信息 stat fstat

表头文件: 1 #include <sys/stat.h> 2 #include <unistd.h>定义函数: 1 int stat(const char *file_name, struct stat *buf);函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败...

2020-03-13 17:43:22 75

原创 文件描述符

dup dup2头文件: 1 #include<unistd.h>调用: 1 int dup(int oldfd); 2 int dup2(int oldfd, int newfd);作用:1、两个均为复制一个现存的文件的描述2、两个函数的返回:若成功为新的文件描述,若出错为-1;3、由dup返回的新文件描述符一定是当前可用文件描述中的最小数...

2020-03-13 17:42:04 248

原创 映射mmap()

mmap, 从函数名就可以看出来这是 memory map, 即地址的映射, 是一种内存映射文件的方法。(其他的还有 mmap() 系统调用,Posix 共享内存,以及系统 V 共享内存)原因:使用 mmap 方式获取磁盘上的文件信息,只需要将磁盘上的数据拷贝至那块共享内存(内核空间和用户空间共享)中去,用户进程可以直接获取到信息,而相对于传统的 write/read IO 系统调用,必须先把数...

2020-03-13 17:35:26 109

原创 c++对c的加强(三)--函数升级

宏函数:省去了形参以及函数体里所需分配的空间;省去了函数调用,传参,函数返回,释放等过程。所以频繁且功能简单的函数应该使用宏函数 1 #define ADD(a,b) a + b自定义函数 vs 宏函数编译时间换取内存时间:宏函数内存空间换取运行时间:inline修饰的函数(内联函数:将函数体里的语句内嵌到函数调用的地方,省去了函数调用,返回等操作,提高了运行效率)在c中:凡是i...

2020-03-13 17:28:23 99

原创 c++对c的加强(二)

C的关键字修饰:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。省去了CPU到内存中抓取数据的时间。register : 不能修饰全局变量,也不能修饰函数,只能修饰局部变量。static : 局部变量,全局变量,函数都可以修饰。注意在c中变量存在寄存器后就不能取地址,因为取地址是去内存的地址,但变量已经可以能被存在寄存器里了。C++的升级:可...

2020-03-13 17:25:41 89

原创 c++对c的加强(一)

1、C++命名空间(最好定义在头文件中)①使用命名空间的目的:防止变量名、函数名、类名发生冲突,限制变量的作用域;②命名空间的定义:1 namespace one2 {3 int num = 6;4 int count = 7;5 }③命名空间的使用:命名空间名::变量名或者函数名(one::num)④命名空间可以嵌套使用: 1 namespace on...

2020-03-13 17:20:30 82

原创 Linux c系统编程(一)概述

概述:1、Linux c系统编程有叫嵌入式网络编程(主要涉及:文件,进程,进程间通信,多线程,网络,大并发网络服务器,数据库,shell编程等)2、Linux操作系统的组成:用户空间,内核空间。(原因:分成两个空间以保护内核不被用户轻易访问)3、用户空间如何访问内核空间? (系统调用,硬件中断,软件中断)4、系统调用:用户通过调用操作系统提供的函数(API)来访问内核的数据或者获取服务;...

2020-03-03 16:26:50 264

原创 Linux c++开发——概述

嵌入式面向对象编程(嵌入式Linux C++开发)学习内容:C++(c with class)==95% (数据类型、基本控制语句、函数、关键字、位运算、指针、数组)1.C到C++升级(语法升级)2.C++面向对象的三大特点(封装、继承、多态)3.C++内存管理(智能指针、内存池)4.C++异常处理5.C++文件处理(IO操作)6.C++模板7.C++STL(C++ 语法 :C+...

2020-02-26 17:55:28 219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除