c++ primer学习笔记6_标准库string

3.1命名空间using的声明

到目前为止。我们用到的库函数基本都属于命名空间using。例如std::cin。标准读入。Std::cout标准输出。下面介绍更为便捷的using声明,有了using声明,就无需使用专门的前缀,也能够使用它的名字了。Using声明的形式如下:

按照规定,每个using声明引入命名空间中的一个成员。例如:

using namespace::name;


一般来说,位于头文件的代码,不应该使用using声明。

3.1.2 标准库类型string

标准库类型string是表示可变长的字符序列。使用string类型必须包含string的头文件。作为标准库的一部分,string也定义与std命名空间里。下面实例:

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
	cout<<"enter two numbers:"<<endl;
	int v1,v2;
	cin>>v1>>v2;
	cout<<"the sum of"<<v1<<"and"<<v2<<"is"<<v1+v2<<endl;
	return 0;
}


那么如何定义和初始化string对象呢。可以有好几种方法。来看实例

string s1;
string s2=s1;
string s3="hello";
string s4(10,"c");


我们来看他们分别是什么意思,第一句是定义了一个string对象s1,它是要默认初始化。一般为空串。第二句,定义了一个s1的副本s2.第三句,定义了s3,内容为hello,第四局为连续10c。注意,如果是用=来初始化一个变量,实际上式拷贝初始化,,如果不使用=,则是直接初始化。

再来看string可以进行的操作。首先是读写string对象,我们知道一般用iostream来读写内置类型的值,也可以是使用io操作符来读写。比如

int main()
{
	string s;
	cin>>s;
	cout<<s<<endl;
	return 0;
}


也可以这样读写如:

string s1,s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;


如果是读写未知数量的整数,可以这样:

int main()
{
	string word;
	while(cin>>word)
	{
		cout<<word<<endl;
	}
	return 0;
}


有时我们希望在得到的字符串中保留输入的空白符,这是可以使用getlinegetline函数的参数是一个对象和一个输入流。函数从给定的输入流中读入内容,直到换行符为止,把所读的内容存入string对象中。Getline对换行符非常敏感,只要一碰到换行符立即结束,输出结果。不带半点马虎的。就像是老鼠见了猫,撒腿就跑。哈哈。下面来个例子。

int main()
{
	stirng line;
	while(getline(cin,line))
	{
		cout<<line<<endl;
}
return 0;
}


然后来说说empty函数。它是干嘛的呢??

Empty函数根据string对象是否为空返回一个布尔值。Empty同样是string的一个成员函数,举个例子

while(getline(cin,line))
{
	if(!line.empty())
	{
		cout<<line<<endl;
}
}


Size函数是返回string对象长度的。来看一下:

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


那么大家想一想size函数的返回值是什么呢,你们肯定又错了,它的返回类型是string::size_type,它是一个无符号类型的值,而且能够存放下任何string对象的大小。我们可以用auto或者decltype推断它的类型,由于它是无符号整数型。注意,如果还有有符号型,千万别搞乱了,否则会出大错啊。

另外,string中定义了几种用于比较字符串的运算符。首先是相等运算符包括==和!=,它是用来检验string对象是否相等或不等。字符串相等意味着长度相同并且包含的字符也全部一样。当然还有》=,《=,等等,作用就不言而喻了。注意,上面这些运算符都是按照字典顺序的。

1.如果两个string对象的长度不同,而较短的字符串都与较长的字符串对应相同,就是较短的小于较长的。

2.如果两个string对象在某个位置对应不一致,那结果是第一个相异的结果。

举个例子。

string str="hello";
string phtase="hello world";
string slang="hiya";


根据规则1可断定str小于phrase。根据规则2,可判断slang大于phrase

对于两个对象相加,就很简单了,就是把左侧的运算对象与右侧的运算对象串接起来就ok,来看例子

string s1="hello";
string s2="world";
string s3=s1+s2;
s1+=s2;


还有一个要提醒大家,字符串字面值和string类型是不同的类型,不要混淆。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值