第一部分 基本语言 第三章 标准库类型(3.2标准库string类型)

3.2标准库类型


一、几种初始化string类型方式:

string类支持几种构造函数用于初始化该类型对象,当没有指定对象参数时,用默认构造函数进行初始化。

1、string s1:默认构造函数s1为空串。

2、string s2(s1):将s2初始化为s1的一个副本。

3、string s3(“value”):将s3初始化为字符串的字面值副本。

4、string s4(n,'c'):将s4初始化为'c的n个副本。


二、读入未知数量的string对象:

int main()

{

string word;

while(cin>>word)

cout<<word<<endl;

return0;

}


三、使用getline读取整行文本

getline函数接受两个变量:一个读入流对象和一个string对象。getline函数从输入流下一行读取,并保存读取内容(不包含换行符)getline函数不忽略行开头的换行符,遇到换行符停止读取并返回。

int main()

{

string line;

while(getline(cin,line))

cout<<line<<endl;

return0;

}


四、string对象的操作

1、size操作:

int main()

{

string st("the expense of spirit\n");

cout<<"the size of "<<st<<"is "<<st.size()<<endl;

return0;

}


size操作返回对象中字符的个数。


2、empty操作:

empty是一个bool值,操作返回true和false。当对象中没有字符时返回false,否则返回true。


3、string::size_type类型:

string类型和其他许多库类型都定义了配套类型,通过配套类型,库类的使用就可以与机器无关(不受硬件规格限制的不同),为了使用string类型定义的size_type类型,必须使用作用域操作符来说明size_type类型是由string类型定义的。


4、string关系操作符:

string类型的关系操作符有这几种"<",">","<=",">=","=="。

其中"=="操作符是用于比较两个string对象是否相等,如果相等,则返回true,否则返回false。当比较两个string对象时,是按照字典顺序比较,就是在字典顺序中排在前面的小,排在后面的大。


5、string对象的赋值:

可以将两个string对象用赋值的形式传递值。这个过程是受值对象释放原来内存,再分配足够大的内存,再将传值对象的字符复制过来。


6、两个string对象相加:

string对象的加法操作定义为连接,将两个string对象的字符通过使用加操作或者复合赋值操作连接起来。

当和字符串字面值联结式要注意:+操作符的左右操作数至少有一个是string类型的。


7、从string对象获取字符:

string类型可以通过下标操作([])访问string对象的单个字符。下标操作符需要size_type类型来标明要访问的字符的位置。

下标操作可以用作左值。

使用下标操作需要注意:上限在string对象以内。





习题解答:

1、编写一个程序,读入两个string对象,测试他们是否相等,若不相等则指出哪个比较大。

#include <iostream>

#include "Header.h"

string s;

int main(int argc, const char * argv[])

{

string a,b;

cout<<"please enter two string"<<endl;

cin>>a>>b;

if (a==b) {

cout<<"equal"<<endl;

} else {

if (a.size()>=b.size()) {

cout<<"the bigger one is"<<a<<"the size of string is"<<a.size()<<endl;

} else {

cout<<"the bigger one is "<<b<<" the size of string is "<<b.size()<<endl;

}

}

}


2、编一个程序,从标准输入读取多个string对象,并把它们连接到一起存放在一个更大的string对象中,并输出连接后的string对象。接着改写程序将相邻的string对象以空格隔开。

#include <iostream>

#include "Header.h"


string s;


int main(int argc, const char * argv[])

{

string a[3],b;

cout<<"please enter the string"<<endl;

for (int i=0; i<3; ++i) {

cin>>a[i];

}

for (int i=0; i<3; ++i) {

b+=a[i]+" ";

}

cout<<b<<endl;

}


3、下列程序实现什么功能?合法吗?如不合法说明理由。

cout<<b<<endl;

string s;

cout<<s[0]<<endl;


答:合法,输出s的第一个字符,但是由于s未定义,默认为空。输出空字符。


4、要求编写程序去掉字符串中的标点符号。

#include <iostream>

#include "Header.h"


int main(int argc, const char * argv[])

{

string s,b;

cout<<"please enter s"<<endl;

cin>>s;

for (string::size_type i=0; i<s.size(); ++i) {

if (ispunct(s[i])) {

s[i]=true;

} else {

b=b+s[i];

}

}

cout<<s<<endl;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值