标准库类型String用法总结(1)

头文件及命名空间

#include<string>
using std::string

定义及初始化string对象

string s1; //默认初始化,s1是一个空串
string s2(s1);//s2是s1的副本
string s2=s1;//等价于s2(s1),s2是s1的副本
string s3("value");//s3是字面值"value"的副本,除了字面值最后那个空字符
string s3="value";//等价于s3("value"),s3是字面值"value"的副本
string s4(n,'c');//把s4初始化为由连续n个字符c组成的串

读写string对象

标准库iostreamcin,cout可读写int,double等内置类型的值,同样,也可以使用IO操作符读写string对象;

int  main()
{
	string s;  //空字符串
	cin>>s;  //将string对象读入s,遇到空白停止
	cout<<s<<endl;  //输出s
	return 0;
}

在char类型中,有输入函数scanf来读取,但遇到空就会终止,同样的,用cin来读取string对象时,遇到空也会终止。比如程序输入“Hello World!”,程序将输出"Hello"。
当然,和内置类型的输入操作一样,string对象的此类操作也是返回运算符左侧的运算对象作为其结果。因此,多个输入或输出也可以连在一起写:

string s1,s2;
cin>>s1>>s2; //把第一个读入s1中,第二个读入s2中 输入:Hello World
cout<<s1<<s2; //输出两个string对象 输出:HelloWorld

读入未知数量的string对象

int main()
{
	string word;
	while(cin>>word) //反复读取,直至到达文件末尾
		cout<<word<<endl; //逐个输出单词,每个单词后紧跟一个换行符
	return 0;
}

使用getline读取一行

cin可以读取string对象,但有一缺点就是遇到空格就结束,而getline刚好可以弥补这个缺点,读取一行字符串,包含空格,直到遇到第一个换行符,但不存放换行符。

int main()
{
	stirng line;
	//每次读取一整行,直至达到文件末尾
	while(getline(cin,line))
		cout<<line<<endl;
	return 0;
}

string 的empty和size操作

empty函数判断string对象是否为空,并返回一个bool值,如果为空,则返回true,否则返回false。

while(getline(cin,line))
{
	if(!line.empty()) //若不为空则输出对象line
		cout<<line<<endl;
}

size函数返回string对象的长度(即string对象中字符的个数),可以使用size函数只输出长度超过80的字符串:

string line;
while(getline(cin,line))
	if(line.size()>80)
		cout<<line<<endl;

比较string对象

string类定义了几种用于比较字符串的运算符,这些运算符逐一比较string对象中的字符,并且对大小写敏感。
相等性运算符:==和!= 检验两个字符串是否相等;
关系运算符:<,<=,>,>= 分别检验一个string对象是否小于,小于等于,大于,大于等于另外一个string对象。
上述运算符都依照(大小写敏感)字典顺序:
1.如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象。
2.如果两个string对象在某些对应的位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果。

为string对象赋值

string st1(10,'c'),st2;//st1的内容是 cccccccccc,st2是一个空字符串
st1=st2;//赋值,用st2的副本替换st1的内容
              //此时st1和st2都是空串

两个string对象相加

string类允许使用加法运算符(+)将两个string对象连接起来,也可使用复合赋值运算符(+=)把右侧string对象的内容加到左侧string对象的后面:

string s1="hello, ",s2="world\n";
string s3=s1+s2; //s3的内容是hello, world\n;
s1+=s2; //等价于s1=s1+s2

字面值与string对象相加

当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧对象至少有一个是string

string s1="hello",s2="world";
string s3=s1+', '+s2+'\n';
string s4=s1+', ';//正确,把一个string对象和一个字面值相加
string s5="hello"+', ';//错误,两个运算符都不是string
string s6=s1+', '+"world";//正确,每个加法运算符都有一个运算对象string
string s7="hello"+', '+s2;//错误,不能直接将两个字面值相加

处理string对象中字符的字符函数

在头文件cctype中定义了一组标准库函数处理字符串中的字符

isalnum(c)   当c是字母或数字时为真
isalpha(c)   当c是字母时为真
iscntrl(c)   当c是控制字符时为真
isdigit(c)   当c是数字时为真
isgraph(c)   当c不是空格但可打印时为真
islower(c)   当c是小写字母时为真
isprint(c)   当c是可打印字符时为真(即c是空格或c具有可视形式)
ispunct(c)   当c是标点符号时为真(即c不是控制字符、数字、字母、可打印空白中的一种)
isspace(c)   当c是空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符中的一种)
isupper(c)   当c是大写字母时为真
isxdigit(c)  当c是16进制数字时为真
tolower(c)   如果c是大写字母,输出相应的小写字母,否则原样输出
toupper(c)   如果c是小写字母,输出相应的大写字母,否则原样输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值