(12)标准库类型string

标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件。作为标准库的一部分,string 定义在命名空间std中。如:

#include<string>
using std::string;

定义和初始化string对象:
如何初始化类的对象是由类本身决定的。一个类可以定义很多种初始化对象的方式,只不过这些方式之间必须有所区别:或者是初始值的数量不同,或者是初始值的类型不同。下面是初始化string对象的几种方式:



直接初始化和拷贝初始化的区别:
如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化.


string对象上的操作(大部分):



读取string对象:
如:

#include<iostream>
#include<string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
void main(){
string s;	//空字符串
cin>>s;		//将string对象读入s,遇到空白停止
cout<<s<<endl;	//输出s
system("pause");
}
和内置类型的输入输出操作一样,string对象的此类操作也是返回运算符左侧的运算对象作为其结果,因此多个输入或多个输出可以连写在一起。同时string是可变长的字符列表,所以可以输入任意数量的字符。


使用getline读取一整行:
有时候我们希望能够在最终得到的字符串中保留输入时的空白符,这时应该用到getline函数代替原来的>>运算符。
getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然把所读的内容存入到那个string对象中去(注意不存在换行符),返回过程中换行符实际上被丢弃了。
getline只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。如果开始输入的是换行符,那么得到的结果是个空string。

string::size_type类型

需要说明一下,string对象的size函数返回的结果是一个string::size_type类型的值,它也是一个无符号类型的值,而且能足够存下任何string对象的大小。允许编译器通过auto或者decltype来推断变量的类型。

string类及其大多数标准库类型都定义了几种配套的类型。这些配套类型体现了标准库类型与机器无关的特性,类型size_type即是其中的一种。


比较string对象:

string对象的比较按照(大小写敏感的)字典顺序:

一.如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象。

二.如果两个string对象在某些对应的位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果。


对于string类而言,允许吧一个对象的值赋给另外一个对象。如:

string s1("hello"),s2;
s2=s1;


两个string对象相加:

两个string对象相加得到一个新的string对象,其内容是把左侧的运算对象与右侧的运算对象串接而成:前半部分是加号左侧string对象所含的字符、后半部分是加号右侧string对象所含的字符。


字面值和string对象相加:

因为标准库允许把字符字面值和字符串字面值转换成string对象,所以在需要string对象的地方就可以使用这两种字面值来代替。如:

string s1 = “hello”;
string s2 = s1+',';
s2+=s2+"\n";
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string对象。
string s3 = "hello"+",";     //错误
因为某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值不是标准库类型string的对象。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值