![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 83
一只会铲史的猫
20多年C/C++编程经验
展开
-
如何用C/C++实现去除字符串头和尾指定的字符
编程时我们经常需要对字符串进行操作,其中有一项操作就是去除字符串的头(尾)指定的字符,比如空格。通常我们会使用封装好的库函数或者类函数的Trim方法来实现,如果自己动手写一个TrimHead和TrimTail函数该如何实现呢? 本文针对字符串头(尾)部指定的字符的去除,分别给出两个实现方法。并分别比较一下改进后的性能如何?一、从头部开始去除指定字符首先从头遍历,直到遇见第一个非指定字符,此后将后续字符按顺序逐一前移。// 实现方式一void TrimHead(char* pszSrc,原创 2022-04-26 14:45:41 · 5532 阅读 · 0 评论 -
你了解红黑树么?告诉你一个不一样的红黑树,说点有意思的吧!
先看如下两个问题:问题1、红黑树的键值可以重复么?问题2、红黑树必须有键值么?关于红黑树的介绍网上非常多,红黑树的应用也非常广泛。问一下度娘,她会告诉你各种各样的实现方法,C和C++版本都有,linux内核使用的版本也有。代码都大同小异,就是插入或删除时如何修正,如何搞平衡。很多文章图文并茂、写实而生动,当你在脑海里试图左旋一把,右旋一把搞平衡时,基本也到了精神崩溃的边缘。如何维护祖孙三代父、祖父、叔叔以及兄弟间的平衡,如何搞好家庭关系,是个头疼的问题。如果把红黑树比作一个族谱的话,可能开始你是高祖原创 2021-09-02 13:46:45 · 1190 阅读 · 6 评论 -
为何要打印日志?C++在高并发下如何写日志文件(附源码)?
为何要打印日志?让程序裸奔不是一件很快乐的事么?有些BUG就像薛定谔的猫,具有波粒二象性,当你试图去观察它时它就消失了,当你不去观察它时,它又会出现。当你在测试人员面前赌咒发誓,亲自路演把程序跑一遍的时候,这些bug就会神奇的消失;一旦离开你的骚操作重新回到测试人员手中,这些bug又会突然的出现。这就是开发人员和测试人员互相对天发誓自证清白的尬聊场面。因为这些幽灵Bug破坏了团队的氛围,伤害了开发和测试人员的感情,从而导致了产品质量下降。 因此非常有必要找到这些bug发生的原因。试图找到这些具备量子特原创 2021-08-24 13:42:25 · 301 阅读 · 1 评论 -
超值分享:ASN.1格式解析源码(未使用openssl),有助于分析证书、私钥等文件
源码下载地址一款简单的ASN.1格式解析工具,可将ASN.1格式输出,是你分析证书、私钥等文件的必备良器,比如查看公钥大数、私钥大数、加密算法、HASH、MAC算法等。ASN.h(.cpp)包含了ASN.1格式的解析类,ASNFileParse.cpp中提供了常用的pem、der等文件的解析。本源码未使用Openssl库。我在 基于SSL(TLS)的HTTPS网页下载——如何编写健壮的可靠的网页下载 中也是使用该类分析公钥和私钥。开发环境:Windows+VS2010ASN格式数据分两大类,基本数原创 2021-07-06 15:44:56 · 1207 阅读 · 0 评论 -
【超值分享】为何写服务器程序需要自己管理内存,从改造std::string字符串操作说起。。。
比如无处不在的HTTP协议,基于请求—应答的超文本协议,一问一答非常简单,请求头和响应头都是非二进制的字符串。当服务端收到客户端的GET或POST请求时,服务器程序要先构造一个响应头并拼接响应体,如下: // 构造响应头 string strHttpResponse; strHttpResponse += "HTTP/1.1 200 OK\r\n"; strHttpResponse += "Server: HttpServer \r\n"; strHttpResponse += "Content原创 2021-07-27 09:30:20 · 268 阅读 · 1 评论 -
如何定义一个自带数据区的结构体:三种数据结构体的比较
先看如下三个结构体的定义这三个结构体的前三个成员都相同,前两个成员只是为了充个数,从而让我们定义的struct看上去真的像个结构体,一个是char类型,一个是int类型。最后一个也是int类型,iDataLen用于记录结构体自带数据的长度,pData指向的就是我们“认为”的数据区。// 结构体1typedef struct data_node1{ char cDummy; int iDummy; int iDataLen; char* pData;}DATA_NODE1;//原创 2021-07-22 15:16:00 · 313 阅读 · 1 评论 -
如何用C++封装一个简单的数据流操作类(附源码),从而用于网络上的数据传输和解析?
历史溯源由于历史原因,我们目前看到的大部分的网络协议都是基于ASCII码这种纯文本方式,也就是基于字符串的命令行方式,比如HTTP、FTP、POP3、SMTP、Telnet等。早期操作系统UNIX(或DOS),用户操作界面就是控制台,控制台的输入输出方式就决定了用户只能通过敲击键盘的方式将协议命令输入到网络,这也就导致了回车换行"\r\n"会作为一次命令结束的标识。比如HTTP协议,与主机建立连接后,输入"GET / HTTP/1.1\r\n"即可获取网站的主页。比如email协议,早期的电子邮件协议原创 2021-08-03 11:01:57 · 507 阅读 · 0 评论