《C++ Primer》读书笔记-第三章 02 标准库类型string
来源:互联网 发布:医疗数据采集网关 编辑:程序博客网 时间:2024/05/17 04:02
链接:https://zhuanlan.zhihu.com/p/23471766
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
声明:
- 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
- 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
- 本文仅作学习交流使用,禁止任何形式的转载
- 定义和初始化
- 支持的操作
- 处理string对象中的字符
- 范围for语句
- 下标运算符
- 迭代器
定义和初始化
如何初始化类的对象是由类本身决定的
初始化string对象的方式
string s1; string s2( s1 ); string s2 = s1; string s3("value"); string s3 = "value"; string s4( n, 'c' )
上面的初始化形式可以分为两类:
- 拷贝初始化:使用等号初始化一个变量,编译器把等号右侧的初始值拷贝到新创建的对象中去
- 直接初始化:不使用等号
注意到只有s4没有提供拷贝初始化的形式,其实是有的,只是形式复杂而不被使用
string s4 = string( n, 'c' );
等号右侧的表达式负责创建一个临时对象,然后再执行拷贝初始化。这种方式复杂而且没有优势,因此不被使用
支持的操作
os << s is >> s getline( is, s ) s.empty() s.size() s[n] s1 + s2 s1 = s2 s1 == s2 s1 != s2 <, <=, >, >=
详细释义见《C++ Primer》 P77, 表3.2
1. cin和getline
在cin >> s时,用户输入” Hello World! “,实际得到的s为”Hello”
如果想要得到完整的输入,可以使用getline函数
getline( cin, s )
2. size
size函数的返回值类型是string::size_type
size_type是在类string中定义的,它是一个无符号类型的值
不使用int等是为了做到与机器无关(int等的长度与机器有关)
3. s1 + s2
两个string对象相加,得到一个新的string对象,它的内容由两个string对象拼接而成
string对象可以和字面值相加
两个字面值不能相加
多个相加时注意加法的左结合律(同小学数学)
处理string中的字符
前面提到string是可变长的字符序列
有三种方式可以访问其中的字符
- 范围for语句
- 下标运算符
- 迭代器
范围for
for( declaration : expression ) statement
实例
string str( "some string" ); for( auto c : str ) { cout << c << endl; }
可以看出,declaration负责定义一个变量,
以便在statement中使用,
expression则代表待处理的序列
还可以在循环中改变字符串中的字符
for( auto &c : s ) { c = toupper( c ); } cout << s << endl;
注意,这里把c定义成了引用
下标运算符
string str( "some string" ); if( !s.empty() ) { s[0] = toupper( s[0] ); }
下标运算符([])接收的输入参数是string::size_type类型的值,表示要访问的字符的位置,返回值是该位置上字符的引用
下标越界是c++中常见的错误,很容易导致整个程序崩溃,在使用时应当注意
下标应当大于等于0且小于s.size()
迭代器放在后续学完vector后讲解
下面看一下可以对字符进行的操作有哪些
isalnum( c ) isalpha( c ) iscntrl( c ) isdigit( c ) isgraph( c ) islower( c ) isprint( c ) ispunct( c ) isspace( c ) isupper( c ) isxdigit( c ) tolower( c ) toupper( c )
使用前需要包含头文件cctype
详细释义见《C++ Primer》第五版(中文版) P82,表3.3
作者说:
如果表达式中已经有了size()函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题
时刻注意检查下标的合法性
- 《C++ Primer》读书笔记-第三章 02 标准库类型string
- 《C++ Primer》读书笔记第三章-1-标准库类型string
- 《C++Primer》 第三章 标准库类型
- C++primer第三章:标准库类型
- c++ primer读书笔记-第三章 标准库类型
- C++ primer 读书笔记--第三章 标准库类型
- 《C++ Primer》读书笔记-第三章 03 标准库类型vector
- 《C++ Primer》读书笔记第三章-2-标准库类型vector
- C++ Primer 第三章 标准库string类型
- c++ primer 第三章 标准库类型 string
- 《C++Primer》读书笔记---标准类型库
- C++Primer笔记 第三章 标准库类型
- C++Primer 学习笔记 第三章(标准库类型)
- C++primer学习笔记-第三章标准库类型
- C++primer第4版第三章标准库类型
- C++ primer 第三章 标准库类型
- C++ Primer 第三章 标准库类型
- C++ Primer 第三章 标准库类型
- 【Java笔试题】对目录进行深度遍历
- 如何使锁屏界面的日期按照设置中的日期格式显示
- 在几何画板中作三角形高的方法
- Java 中 char 和 String 的细节和使用注意
- 高并发解决方案--负载均衡
- 《C++ Primer》读书笔记-第三章 02 标准库类型string
- MySQL基础语句之子查询与连接《图文三》
- Linux内核高性能测试工具pktgen的简单使用
- Spring通过RestTemplate传送数据
- 罚函数(penalty function)的设计
- 小白如何玩转Java的数据结构—轻松理解学习
- CSS深入理解之padding
- 《C++ Primer》读书笔记-第三章 03 标准库类型vector
- Http 协议总结