标准库类型string表示可变长的字符序列,使用时必须先包含头文件<string>,且string定义在命名空间std中
定义和初始化string对象
string s1;//默认初始化,这是一个空字符串
string s2 = s1 ;//拷贝初始化,s2是s1的副本
string s3 = "huya" //同样,s3是该字符串字面值的副本,字面值中除了最后的空字符外其他所有的字符都被拷贝到新创建的string对象中去了
string s4(n,'c')//初始化为n个'c'字符组成的串
初始化分为直接初始化和拷贝初始化,使用等号=初始化一个变量执行的就是拷贝初始化,不然就是直接初始化。
当初始值只有一个时,使用直接初始化或者拷贝初始化都可以。如果初始化要用到的值有多个,一般而言只能用直接初始化的方法。
读写string对象:
在读取操作时,string对象会自动忽略开头的空白(空格符,换行符,制表符)并从第一个真正的字符开始读起,直到遇到下一处空白为止。
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string a;
while(cin>>a)
cout<<a<<endl;
}
运行结果:
使用getline读取一行,函数从给定的输入流读入内容,直到遇到换行符为止(换行符也被读进来了),然后将所读内容读入string对象(换行符不读入),且getline函数只要一遇到换行符就结束,哪怕刚开始是换行符也是如此。
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string a;
while(getline(cin,a))
cout<<a;
}
string 的empty和size操作
empty根据string对象是否为空返回一个对应的布尔值。
size函数返回string对象的长度,且size函数返回的是一个string::size_type 类型的值,这是一个无符号类型的值
所以要注意在表达式中混用了带符号数和无符号树都将产生意想不到的结果
如:
s.size()<n
如果n是一个负值,这是将会自动转换成一个比较大的无符号值!
处理string对象中的字符
使用范围for语句,遍历给定序列中的每个元素并且对序列中的每个值执行某种操作
for (declaration : expression)
statement
expression 部分是一个对象,表示一个序列,declaration部分负责定义一个变量用于访问序列中的基础元素。
每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。
例子:
string str("Some string");
for(auto c : str)
cout<<c<<endl;
如果想访问string对象中的单个字符,一是使用下标,二是使用迭代器。
(需要注意!string对象的下标必须>=0 && <s.size())
例子:
for(decltype(s.size()) index = 0;index != s.size() && !isspace(s[index]);++index)
s[index] = toupper (s[index]);