第一部分 基本语言 第三章 标准库类型(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;
}
一、几种初始化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;
}
相关文章推荐
- 第一部分 基本语言 第三章 标准库类型(3.3标准库vector类型)
- 第一部分 基本语言 第三章 标准库类型(3.3标准库vector类型)
- 第一部分 基本语言 第三章 标准库类型(命名空间的using声明)
- 第一部分 基本语言 第三章 标准库类型(3.4迭代器简介)
- 第一部分 基本语言 第三章 标准库类型(3.5标准bitset类型)
- 第一部分 基本语言 第三章 标准库类型(3.4迭代器简介)
- 第一部分 基本语言 第二章 变量和基本类型(2.8类类型)
- 第一部分 基本语言 第二章 变量和基本类型(2.3.5声明和定义)
- 第一部分 基本语言 第二章 变量和基本类型(2.6typedef名字)(2.7枚举)
- C++ 学习笔记 1.0 : 基本语言(变量和基本类型,标准库类型,表达式,语句,函数,标准IO库)
- 第一部分 基本语言 第二章 变量和基本类型(2.9编写自己的头文件)(预处理器)
- 第三章 标准库类型(part 1) 标准库 string 类型
- 第一部分 基本语言 第二章 变量和基本类型(2.3.6名字的作用域)(2.3.7在变量的使用处定义变量)
- 第一部分 基本语言 第二章 变量和基本类型(2.3.3定义对象)
- 第一部分 基本语言 第二章 变量和基本类型(2.5引用)
- 第一部分 基本语言 第二章 变量和基本类型(2.3.4变量初始化规则)
- 第一部分 基本语言 第二章 变量和基本类型(2.4const限定符)
- 【C++ Primer】【学习笔记】【第三章】标准库类型之:string类型
- c++ primer第五版(中文)习题答案 第三章第二节-标准库类型string
- C++primer 3.2 标准库类型string(sizeof的使用)