标准库类型string

标准库string类
string 表示可变长度的字符序列
字符串是对象

string 类支持字符串对象的各种操作:
1、各种初始化方式
2、字符串之间的复制、比较、连接
3、查询字符串长度和判断字符串是否为空
4、访问字符串中的单个字符

使用string 类要包含头文件

初始化string对象的方式:
1、string s1 //默认初始化,s1是一个空串
2、 string s2(s1) //s2是s1的一个副本
3、string s2=s1 //等价于 string s2(s1)
4、string s3(“value”) //s3是字面值“value"的副本,除了字面值最后的空字符外
5、string s3=“value” // 等价于s3(“value”)
6、string s4(n,‘c’) // 把s4初始化为由连续n个字符c组成的串

string的常用操作:
os<<s 将s写到输出流os中,返回os
is>>s 从输入流is读取字符串赋值给s,字符串以空白分割,,返回is
getline(is,s) 从输入流is中读取字符串赋值给s,返回is
s.empty() s为空返回true,否则返回false
s.size() 返回s中字符的个数
s[n] 返回s中第n个字符的引用,位置n从0开始
s.c_str() 转换,返回s中内容对应的c风格字符串的首地址
s1=s2 赋值,用s2的副本替换s1原来的内容
s1+s2 连接,返回s1和s2连接后的内容
s1+=s2 追加,把s2的内容追加到s1的后面
s1==s2 如果s1和s2的内容完全相同,则相等
s1!=s2 string对象的比较对字符区分大小写
<,<=,>,>= 利用字符在字典中的顺序进行比较,区分大小写

可以用循环读取未知数量的string对象
输入操作符返回输入流对象,如果输入流对象处于有效状态,表示没有遇到文件结束或非法输入

//读取输入流中的单词,直到文件结束
string word;
while(cin >> word)
cout << word << endl; 

getline()函数:
两个参数:输入流对象和存放读入字符串的string对象
从指定输入流中读取内容,遇到换行符为止;将所读内容存入指定的string对象中,流中的换行符被读取并丢弃
返回参数输入流对象

//每次读取一行文本,直到文件结束
string line;
while(getline(cin, line))
cout << line << endl;

判断stirng对象是否为空
empty()函数判断string对象是否为空,返回一个布尔值
stringObj.empty()

//每次读取一行文本,输出非空的行
string line;
while(getline(cin, line))   
  if(!line.empty())  //line不为空,输出
    cout << line << endl; 

获取string对象的长度
size()函数返回string对象的长度,即对象中字符的个数
返回的长度是string::size_type类型

//每次读取一行文本,输出长度超过80个字符的行
string line;
while(getline(cin, line))   
  if(line.size() > 80)
  cout<<line<<endl;
 //字符串长度的类型
string line = "hello";
string::size_type len1 = line.size(); 
auto len2 = line.size();
decltype(line.size()) len3 = 0;

比较string对象:
可以用关系运算符比较两个字符串对象
两个string相等意味着它们的长度相同,并且所包含的字符也完全相同

string s1 = "hello";  
string s2 = "hello world"; // s2 > s1
string s3 = "Hello";  // s3 < s1, s3 < s2

string对象的赋值和连接
允许把一个string对象的值赋给另一个string对象
也可以为string对象赋一个字符串字面值常量

string s1 = "hello", s2;
s2 = s1;
s1 = "C++ Programming Language";

两个字符串可以直接用运算符“+”连接,结果得到一个新的string对象,"+"运算符要求至少有一个运算对象是string
复合赋值运算符“+=”则将右操作数的内容追加到左操作数的后面

string s1 = "hello, ", s2 = "world! " ;
string s3 = s1 + s2;
s1 += s2;
string s4 = s1 + "\n";   //正确
string s5 = "hello" + "\n";  //错误
string s6 = s1 + " world" + "\n"; //正确
string s5 = "hello" + "," + s2;  //错误

string对象和C风格字符串
字符串字面值不是string类型,而是const char类型
string对象和C风格字符串的转换
可以将C风格的字符串直接赋给string对象,反之不可
用string对象的c_str()操作可以返回一个表示该string对象内容的C风格字符串,结果为const char
类型,即C风格字符串的首地址

string s1 = "If you really want it.";
int x = strlen(s1);   //Error
x = strlen(s1.c_str());   //OK

处理string对象中的字符
使用下标运算符可以获取string对象中指定位置的字符
可以使用for循环或range for逐个处理string对象中的字符
头文件中定义了一组获取或改变字符特性的标准库函数

随机访问string中的字符
用下标运算符可以访问string对象中指定位置的字符
string对象s的下标范围从0到s.size-1

//将s中的第一个词改成大写形式
string s = "Hello, World!";
int index = 0;
while (index != s.size() && !isspace(s[index])) {
s[index] = toupper(s[index]);
++index;
}
cout << s << endl;  //输出:HELLO, World!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值