您的位置:首页 > 其它

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

2013-03-31 18:07 274 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐