? ? ? ? empty函数:根据string对象是否为空返回一个对应的bool值。
? ? ? ? empty是string的一个成员函数。调用该函数只要使用一下点函数指明哪个对象需要执行empty函数就可以了。
????????例:
while(getline(cin,line))
{
if(!line.empty())
{
cout<<line<<endl;
}
}
????????line就是string对象,所以使用line.empty()
? ? ? ? 意思是:每次读取一整行,遇到空行直接跳过输出。
? ? ? ? 其中line非空时,line.empty返回false值(0),反之返回true值(1)
? ? ? ? 使用if(!line.empty())的意思就是
line非空时line.empty返回0,!a为真,if条件成立,输出line。
line为空时line.empty返回1,!a为假,if条件不成立,不输出line。
? ? ? ? size函数:返回string对象的长度(即string对象中字符的个数)。
例:
#include<iostream>
using namespace std;
int mian()
{
while(getline(cin,line))
{
if(line.size()>100)
cout<<line<<endl;
}
return 0;
}
?每次输出一整行,但是只输出超过100个字符的行。
string::size_type类型
? ? ? ? 对于size函数来说,返回的是一个string::size_type类型的值。string类及其它大多数标准库类型都定义了几种配套的类型。这些配套类型体现了标准库类型与机器无关的特性。即使我们不知道srting::size_type类型的细节,但是我们知道:它是一个无符号类型的值,并且能够存放下任何一个string对象的大小。其中所有用于存放string类型的返回变量都是string::size_type类型的。
? ? ? ? 在C++11新标准中,允许编译器通过auto或者decltype来推断变量的类型:
auto len = line.size();
? ? ? ? ?len的类型是string::size_type
? ? ? ? 由于size函数返回的是一个无符号整形数,所以在表达式中混用带符号数和无符号数可能会产生意想不到的结果。
? ? ? ? 例:
? ? ? ? 设n是一个具有负值的int,这表达式s.size()<n的判断结果几乎是true。
因为负值n会自动转换成一个比较大的无符号值。