前提:阅读C++ Primer 第五版笔记
string类型表示可变长的字符序列。
头文件:<string>
命名空间:std::string
- 定义和初始化
string
对象
string s1; //默认初始化,直接构造,s1是空字符串
string s2=s1; //s2是s1的副本,调用拷贝构造函数
string s2(s1); //直接构造
string s3="hi" //拷贝初始化
string s3("hi"); //直接构造
string s4(10,'c'); //直接构造 s4内容是'cccccccccc'
string s4=string(10,'c');//拷贝构造
- 赋值
s1=s2;
- 读写
string
对象
string s;
cin>>s; //将string对象读入s,遇到空白停止
cout<<s<<endl; //输出s
string
对象会自动忽略开头的空白(空格符,换行符,制表符等)并从第一个真正字符开始读取,直到下一个空白。
4. 使用getline
读取一整行
getline(cin,string)
函数从cin
输入流中读入内容,直到遇到换行符(换行符也被读取),然后将内容存入string
对象中(不存换行符)。如果第一个字符就是换行符,则结果为空字符串。
5. empty
和size
s.empty() ; // 若s为空,则返回true,否则返回false
size成员函数
size()返回的是一个无符号整型,size_type
因此在大小对比时,应使用无符号整型数据类型。
用法:
s.size(); //返回s的长度
例如:
int n=-1;
if(s.size()<n);//由于负整数会自动转换成无符号整型,也就是一个很大的值,所以该语句几乎都为`true`
-
比较
string
对象
规则:
1. 若两个string
对象长度不同,且两个string
对象相应位置的字符相同,则较短的对象小于较长对象。
2. 对比两个string
对象中相应位置第一个不同的字符,就是比较结果。 -
字符串或字符与
string
相加
标准库允许把字符串或字符转换成string
对象,所以需要string
对象的地方可用这两个类型代替。
注意:当把string对象和字符、字符串类型混在一条语句使用时,必须确保加法运算符两个运算对象至少有一个是string。
string s1=s+","; //正确
string s2=s1+'c'+"c"; //正确,因为string(s1+'c')返回一个string然后+“c”
string s3="he"+","+s2; //错误,因为前两个先运算,都是字符串
- 迭代
string
对象内元素
方法1(c++11):使用for语句
for(declaration: expression)
statement
其中,expression是一个对象,表示一个容器类型,包括string
。declaration负责定义一个变量,该变量将被用于访问容器内的元素。每次迭代,其内容都会初始化为下一个元素内容。
string s("some");
for(auto c:s)
cout<<c<<endl; //将string s中的元素遍历,并输出
若需要改变元素值,则必须把循环变量定义成引用类型
string s("some");
for(auto &c:s)
c=toupper(c); //将s中的每个元素变成大写
方法2:使用下标
if(!s.empty())
cout<<s[0];