广州外贸网站建设,龙游网站建设的公司,建设银行企业网站无法打印回单,建设银行个人官方网站目录 补缺#xff1a;
正题开始#xff1a;
思考#xff1a;
解决方案#xff1a;
1.string类
2.redis库
简介#xff1a;
对于处理字符串的好处#xff1a;
下期预告#xff1a;内容待定 补缺#xff1a;
在上期内容的结尾我留下了一个问题#xff0c;这个问…目录 补缺
正题开始
思考
解决方案
1.string类
2.redis库
简介
对于处理字符串的好处
下期预告内容待定 补缺
在上期内容的结尾我留下了一个问题这个问题是让大家思考八位二进制的最大值和最小值以及它们之间的关系。相信大家都有了自己的一个思考现在解析开始。算是补码的一个小奇葩。
首先这个问题我们要先想到在八位二进制中最大值是多少补码中最大值是1270111 1111。第二个要想一想在补码中的规则在补码中首位是符号位不参与计算所以最大值的表达就是剩下的七位是1首位是0代表最大的有符号数。然后我们再思考在补码中负数是由正数的二进制取反加一来表达的所以我们只要找到正数最大数然后取反就可以了由于补码中八位二进制的最大数127那么我们应该取反加一就行了吗不不不在这里C语言中用到了一个巧妙地方法与之前的方法不同。C语言在八位二进制数的最大值1270111 1111后面直接加一从而得到1000 0000也就是-128。这里的方法和补码的规则不太一样这种方法只是在补码中对于由最大的二进制数转换到最小的二进制数的过程其他的转换还是补码的规则保留首位取反加一。我们加上一之后满足二进制的规则(逢二进一)我们就会得到1000 0000这个数而这恰恰满足补码中对于有符号数的表达首位的1恰好看作是符号位所以这就是补码中关于最大数转换成为最小数的过程循环中的一个方法整数溢出导致的二进制数循环的最特殊的一步。
总结补码中对于最大数到最小数的转换的规则就是找到最大数的二进制表达方式然后加一得到的二进制数就是最小数的表达。至于为什么说这是循环可以看看我上一篇的内容C语言整数溢出的问题 提升补充内容——补码 正题开始
首先我们要清楚字符串其实就是字符数组所以字符数组的结尾也是有\0存在的。而且在C语言中通过字符数组的指针首地址和字符数组的结束符来控制字符数组。
#includeiostream
using namespace std;
int main()
{
char z1[]hello
coutstrlen(z1)endl;//5
coutsizeof(z1)/sizeof(z1[0]);//6char z2[]hel\0lo
coutstrlen(z2)endl;//3
coutsizeof(z2)/sizeof(z2[0]);//4char z3[30]hello2
strcat(z3[],z2[]);
coutz3endl;//hellohel
coutstrlen(z3)endl;//8
coutsizeof(z3)/sizeof(z3[0]);//9
}
上面的代码我们定义了三个个字符数组.我们都知道\0就是字符串的结束符所以我们第一个数组输出的结果就是5和6。这里的strlen就是数组的内容长度sizeof算的是数组的存储长度是包括\0的。那么看z2这里由于hello中插入了一个\0所以hello的长度就被提前结束了所以内容长度只有3但是它的存储长度却是因为多了一个\0所以变成了8。接下来看z3这个数组我们利用strcat来将两个数组进行拼接结果是内容长度是8存储长度是9。拼接的时候第一个数组的结束符会被删除只保留第二个数组的结束符相当于拼接后的字符数组只有一个结束符。 思考
那么你发现了什么。所有的字符数组都是和\0有直接的关系的不论是内容长度还是存储的空间长度都是相关的。所以这就导致我们存储的内容是不能包含\0的而且这种检测存储长度的方法sizeof也会变得很慢效率不高。 解决方案
有两种1 string类 2 redis库
1.string类
#includeiostream
using namespace std;
#includestring
int main()
{
char z1[]hello
coutstrlen(z1)endl;//5
coutsizeof(z1)/sizeof(z1[0]);//6char z2[]hel\0lo
coutstrlen(z2)endl;//3
coutsizeof(z2)/sizeof(z2[0]);//4char z3[30]hello2
strcat(z3[],z2[]);
coutz3endl;//hellohel
coutstrlen(z3)endl;//8
coutsizeof(z3)/sizeof(z3[0]);//9//C的改进方案string zz1hello;
coutzz1.lengthendl;//5
coutzz1.capacityendl;//15
coutsizeof(zz1)endl;//28string zz2hel\0lo;
coutzz2.lengthendl;//3
coutzz2.capacityendl;//15
coutsizeof(zz2)endl;//28zz1zz2;
coutzz1.lengthendl;//8
coutzz1.capacityendl;//15
coutsizeof(zz1)endl;//28}
我们看上面的代码是用C的方案写出的。我们可以看出关于内容长度上C的length还是3其中的capacity是预存空间随着编译器的变化而变化但是看sizeof这个时候的存储空间就是整个string的存储空间不再单独是字符串的存储空间。而且string类的内容很多也跟利于字符串的使用这就是C的升级。 2.redis库
简介
Redis 是一个开源的、使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库并提供多种语言的 API。它通常被称为数据结构服务器因为值value可以是字符串strings、哈希hashes、列表lists、集合sets、有序集合sorted sets、位图bitmaps、超日志hyperloglogs和地理空间geospatial索引半径查询的索引等类型。 对于处理字符串的好处
1.性能高效Redis是基于内存的数据库所以存取字符串的速度非常快非常适合处理高频次的数据读写操作。 2.灵活的数据类型虽然叫做字符串但Redis的字符串实际上可以存储任何形式的字符串包括二进制数据这让它非常灵活。 3.丰富的操作命令Redis提供了许多操作字符串的命令比如SET、GET、INCR用于整数类型的字符串实现自增、DECR自减等可以满足各种复杂场景的需求。 4.原子性操作Redis的很多字符串操作都是原子性的这意味着这些操作在执行过程中不会被其他客户端的指令打断保证了数据的一致性。 5.易于使用Redis的字符串操作接口简单易于理解和使用无论是对于开发者还是运维人员来说都是非常友好的。 6.这些好处使得Redis在处理字符串类型的数据时相比其他类型的数据库或存储系统具有非常明显的优势
关于这个库的使用这里就先不讲不然内容肯定会十分繁杂。
这是链接可以自行看一下源码。
redis库 GitHub里的redis库 到这里这篇关于C语言字符串缺陷就说完了求一个免费的赞感谢阅读。还有一部分内容放到下期。
下期预告C语言字符串缺陷的补充