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,第四局为连续10个c。注意,如果是用=来初始化一个变量,实际上式拷贝初始化,,如果不使用=,则是直接初始化。
再来看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;
}
有时我们希望在得到的字符串中保留输入的空白符,这是可以使用getline,getline函数的参数是一个对象和一个输入流。函数从给定的输入流中读入内容,直到换行符为止,把所读的内容存入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类型是不同的类型,不要混淆。