11 | 一枝独秀的字符串:C++也能处理文本?
该思维导图由 AI 生成,仅供参考
认识字符串
- 深入了解
- 翻译
- 解释
- 总结
C++标准库中的字符串处理是C++编程中的重要组成部分。文章介绍了C++中字符串的特殊性,以及对Unicode和编码处理的支持不足。同时,强调了字符串和容器的不同概念,以及一些小技巧如字面量后缀、原始字符串和字符串转换函数。此外,还介绍了C++17中的字符串视图类string_view,它是一个轻量级的字符串视图,成本很低,内部只保存一个指针和长度,无论是拷贝还是修改都非常廉价。另外,文章还详细介绍了C++标准库中的正则表达式库regex,包括正则表达式的定义、匹配和替换等操作。总的来说,本文为读者提供了对C++标准库中字符串处理和正则表达式的全面了解,同时也指出了C++在处理文本数据方面的局限性,并提供了有益的建议。
《罗剑锋的 C++ 实战笔记》,新⼈⾸单¥59
全部留言(29)
- 最新
- 精选
- 禾桃string_view 较string的优势,能举个具体例子吗? 我感觉string里也是字符串指针和长度(可以变的长度),这个看不出string_view优势在哪?string可以做哪些string_view做不了的事? 谢谢!
作者回复: string会持有所有字符的拷贝,而string_view只有指针和长度。 比如一个1m的字符串,string就占1m内存,而string_view就几个字节。 string_view是字符串的轻量级引用,只读,而string是真实的字符串、可以拷贝修改。
2020-06-01321 - 1coma罗老师也打游戏吗?我听着尼尔的歌看着教程,还以为幻视了。。
作者回复: 哈哈,前一阵刚玩了尼尔机械纪元,还没来得及开三周目。
2020-05-3112 - HoshinoKanade老師一直在用linux,而我活在windows裡面一大堆wchar之中不能自救。
作者回复: 在Windows下写C++确实比较辛苦,不过有vc这个神器,这是Linux比不了的。
2020-05-318 - 李莹using namespace std::literals::string_literals; 编译 no member named 'literals' in namespace 'std' 这个是怎么回事。
作者回复: 字符串后缀s是C++14的特性,C++11没有,需要升级gcc到5.4,然后启用C++14标准。
2020-06-1424 - Weining Cao处理string的话,标准C++的接口实在不够友好,易用。反而第三方库QT的QString用起来就舒服,顺手很多。 在这方面,python语言的string处理比C++要友好太多。比如最简单的string内子串替换功能,python可以直接str. replace(a,b),但C++的replace函数需要先计算出替换string的起始位置,非常繁琐。
作者回复: 现在有了regex好了一点,用boost里的string_algo也比较方便。
2020-05-304 - c1rew针对std::regex与boost::regex之间的性能差异,以下链接有相应的测试及对应的讨论,供大家参考,可以再根据自己项目的实际使用情况再验证下。 https://www.cnblogs.com/bbqzsl/p/13714008.html https://stackoverflow.com/questions/14205096/c11-regex-slower-than-python
作者回复: This is great!
2021-12-0523 - 涤生处理文件名需要分割的时候,特别不方便,Python用一个split函数就够了
作者回复: 是的,C++在字符串方面缺乏很多基本工具,用正则又显得有点重。
2020-10-1223 - TC128老师,小结2说尽量不要用UNICODE,但如果用C++写界面(MFC、DirectUI),且软件又需要国际化,这种情况也尽量不用UNICODE吗?还是说换个语言写界面?
作者回复: 什么事情都不是绝对的,像这种情况就必须用Unicode,但用C++处理还是挺费劲的,其他语言做起来要比C++容易一些。
2020-05-3023 - 怪兽我很赞同老师说的,字符串在程序中的作用就像人对空气一样,所有我也比较看重。也希望老师对字符串转码方面给点建议,以及稍微讲解一下string_view的一些坑或者注意事项。
作者回复: 字符串转码有一些开源库,好像有icov什么的吧,用起来也比较简单,但各种编码格式的选择还是要小心。 string_view就是个简单的字符串引用,内部用一个指针和长度来指向原字符串的位置,所以很轻量级,是只读的,用的时候要注意这一点,不能修改,还有引用的字符串必须是有效的。
2020-06-212 - 怪兽老师,我在VS2017测试了一下,为什么不使用命名空间也可以使用s后缀? // using namespace std::literals::string_literals; auto str = "hello"s;
作者回复: 应该是打开了std名字空间吧。
2020-07-141