《白话C++》第10章 字符串
文章平均质量分 74
《白话C++》第10章 字符串的学习笔记
yanzhenxi
这个作者很懒,什么都没留下…
展开
-
《白话C++》第10章 Page50 10.3 字符串处理 转换为C风格字符串 复制子串(可能有问题)
但事实上pstr所指向的内容有可能是空,也有可能是远洋,也有可能已经错乱了。因为,现在“...”的位置,可能是空行,但以后说不定就有哪位不听话的家伙,在那里插入一堆代码(不知不觉地毁掉pstr指针)。c_str()返回的是const char*,所以调用者不能通过它修改std::string的字符内容。在C++11中,data()和c_str()干一模一样的活,同样返回补上 '\0' 的C风格的。无论是c_str()还是data(),在原string对象调用了非常量的成员操作之后,就失效了。原创 2024-03-01 09:39:41 · 422 阅读 · 0 评论 -
《白话C++》第10章 Page63 10.3.5 boost::lexical_cast
把前面测试boost::lexical_cast的代码,相关内容改为“my::lexical_cast”,看到的测试效果一致,虽然还是山寨班子,但所用的技术却和原厂的lexical_cast基本一致。都是利用了C++的“输入输出流”,可以“吃入”多种类型的数据,再以另外一种类型“吐”出来的基础(有点像魔术盒子),来实现数据在不同类型之间的转换。boost::lexical_cast所使用的流,为了严格起见,主动关闭了 std::ios::skipws参数。居然成功了,顺利的将s转换成pt2。原创 2024-03-02 00:27:55 · 351 阅读 · 0 评论 -
《白话C++》第10章 Page58 10.3.4 string的武器库③
最后,split 还有一个“token_compress_mode_type”类型的参数,它表明如果分割符连续挨在一起,是否要跳过中间空的内容,设母串是“123, 456, 7”,若 type 取 token_compress_on,则空子串被抛弃,默认值是 token_compress_off。有一个字符串内容为“56, 37, 120, 90”,我们希望得到中间的4个数字求和,这就需要将数字从字符串中“抠”出来。它将存储在容器中的字符串,依序拼接成一个新串,并且可以指定连接的分隔符;原创 2024-03-01 22:47:24 · 344 阅读 · 0 评论 -
《白话C++》第10章 Page58 10.3.4 string的武器库②
find_nth”可以查找母串中第N次(N从0开始)出现的子串的位置,但假设已经找到了第N个,则查找第 N+1 次出现的高效做法,应该是从上次查找的位置之后找起。从代码中可以看到,boost::iterator_range提供了转换为bool值的重载,用与判断是否找到,还提供了到字符串转换的重载,会输出其一对迭代器范围内的内容,如果找到的话,就是子串。注意,既然结果中的两个迭代器都指向母串身上的位置,所以如果在查找之后,母串内容被修改了,那么这两个迭代器就会失效,不应再访问!在母串中连续查找子串的实现。原创 2024-03-01 21:39:05 · 363 阅读 · 0 评论 -
《白话C++》第10章 Page55 10.3.4 string的武器库①
所谓“判断式(predicate)”,通常就是一个函数或函数对象,返回值是bool值,而入参则是调用者所要求提供判断的数据,在string_algo中,它是广义上的“字符”类型。,用于传递各国的本地化处理,中国字符由于涉及宽字符等,所以mingw环境下没有实现,但欧洲主要语言的字符的类型判断,确实可以通过本国locate参数实现,如果什么都不传,那么默认其就是纯C的环境,基本可认为就是英美字符体系。等函数,事实上创建了另外一个对象(正好也是一个函数对象),然后再调用那个临时对象的括号重载操作;原创 2024-03-01 18:26:35 · 884 阅读 · 0 评论 -
《白话C++》第10章 Page52 10.3.3 字符串格式化
%w.p”中,w表示输出总长度,浮点数包含小数点占1位,实际长度不足则如前述补位,实际长度超过,则取实长。p表示精度的表达长度,例子中100.2被输出为100.200,因为精度被指示为最少3为,实际精度不足自动补0,实际精度超过则以“四舍五入”原则截断!这里可以看出,并不是C++为“取余操作符(%)”提供了新的功能,而是boost为format这个类,重载了(%)操作符。“格式符控制串”,采用和printf基本一致的控制符表示法,比如s%表示这里需要一个字符串,d%表示需要一个整数。原创 2024-03-01 15:51:05 · 848 阅读 · 0 评论 -
《白话C++》第10章 Page51 10.3 字符串处理 大小(Size)与容量(Capacity) std::wstring(宽字符串)
(并不改变字符串的size()值),需要分配的元素个数使用n表示,如果n为0(默认值)并不是清空,事实上只要n比当前元素个数小,reserve就和shrink_to_fit()函数一个作用。返回是否是空字符串,size()或length()为零,但远比调用后二者再和0判断的操作来的高效。重新设置字符串长度,如果新长度较大,则新出现的字符内容,要么为随机,要么为指定入参c字符的值。std::wstring用于处理宽字符串,宽字符类型为wchar_t。注意,为了性能,std::string在。原创 2024-03-01 11:08:50 · 415 阅读 · 0 评论 -
《白话C++》第10章 Page49 10.3 字符串处理 求子串 字符串拼接
使用+和+=拼接字符串,虽然方便,但效率不高,另外也不方便拼接其他类型,比如整数,更常用的方法是使用标准库的。substr得到当前串从pos位置开始,长度为len范围内的子串,参数采用默认值则相当于复制原串。自加操作“+=”也有意义直观的支持。原创 2024-02-29 21:43:49 · 384 阅读 · 0 评论 -
《白话C++》第10章 Page46 10.3 字符串处理 查找 比较大小
如果要按汉字的拼音甚至笔划排序,效率好的需要操作系统特定API支持,或者将Unicode转换为GBK编码比较勉强有些效果(在Windows下,可将源代码设置为“系统默认”,然后使用std::string存储并比较,有相同效果)。另外,compare的返回值,仅可作大于零,等于零,小于零判断其意义,不能依赖于其具体的返回的大小,比如在某环境下,返回4785,在另一环境下,可能只返回1。英文字符一句在ASCII表中的次序比较,靠前的较小,如果前面字符都一致,但一方还有未出场的队员,则该方为大。原创 2024-02-29 20:53:58 · 897 阅读 · 0 评论 -
《白话C++》第10章 Page44 10.3 字符串处理 插入,删除,清除,替换
一种是size_t类型,表示。插入字符,位置有两种表达,从0计起的字符串索引。原创 2024-02-29 17:02:51 · 406 阅读 · 0 评论 -
《白话C++》第10章 Page43 10.3 字符串处理 std::string
assign的名字如果取成“assign_from”也许更好一些,后面还有个家伙,我们希望它取名为“copy_to”,二者有一定的对应关系。STL中大量使用“[first, last)”表达从first到last,但不含last的区间。,但在std::string看来,这个字符串的内容,就是5个'\0'。下面是部分构造函数的演示代码,请查找对应调用的构造函数。时,第二个整数入参代表的,分别是。后续许多操作的接口都存在这一差异化。s保存了5个连续的“结束符”,不仅构造函数如此,(并且很大程度依赖)原创 2024-02-29 15:20:30 · 371 阅读 · 0 评论 -
《白话C++》第10章 Page41 10.3 字符串处理 std::string
不过,std::string没有直接提供不区分大小写的比较,没关系,后面还会有第三方扩展提供的强大字符串武器库。尽管std::string用于代替纯C字符串,但在实现上,(比如加密或压缩算法处理之后的“字符串”。全套包括大于,小于,大于等于,小于等于,不等于等等。是一个定义在std::string类中的。npos用于表示取到最后一个字符的长度。std::string 提供了。自我内存管理,重载了判断操作符。它统一了字符串和字符组的处理。表达字符串的长度数据的类型。”时,返回此值,代表“原创 2024-02-29 13:46:27 · 422 阅读 · 0 评论 -
《白话C++》第10章 Page39 10.3 字符串处理 纯C字符串
执行以上代码,通常程序会挂掉,除了const问题之外,还需要理解代码中,ppp是指向一段静态数据段,而ppp2则是在栈中分配内存,再从静态数据段中复制字符串内容……所以,如果程序中有大量字符处理,特别是修改字符串内容的操作,请自行或从别人那里搞一套字符串管理工具,通常都给予复杂的后果。这是个绝妙的穿凿,不过也有坏处,比如有时字符串并不一定都是可视字符,如果不可视的内容含有‘\0’会难办;纯C语言使用char * 处理字符串,会自动在字符串最尾部,添加一个零字符‘\0’表示字符串的结束。原创 2024-02-29 12:08:03 · 387 阅读 · 0 评论