2021-02-06

string的empty和size操作

​ 顾名思义,empty函数根据string对象是否为空返回一个对应的布尔值,和Sales_ item类(参见1.5.2 节,第20页)的isbn成员一样,empty也是string的一个成员函数。调用该函数的方法很简单,只要使用点操作符指明是哪个对象执行了empty函数就可以了。

​ 通过改写之前的程序,可以做到只输出非空的行:

//每次读入一整行,遇到空行直接跳过

while (getline(cin, line) )

if (!line.empty() )

cout<<line<<endl;

​ 在上面的程序中,if语句的条件部分使用了逻辑非运算符(!), 它返回与其运算对象相反的结果。此例中,如果str不为空则返回真。

​ size函数返回string对象的长度(即string对象中字符的个数),可以使用size函数只输出长度超过80个字符的行:

string line;

//每次读入一整行,输出其中超过80个字符的行while (getline(cin, line))

if (line.size() > 80)

cout << line << endl;

string::size_type类型

​ 对于size函数来说,返回一个int或者如前面2.1.1节(第31页)所述的那样返回一个unsigned似乎都是合情合理的。但其实size函数返回的是一个string::size type 类型的值,下 面就对这种新的类型稍作解释。

​ string类及其他大多数标准库类型都定义了几种配套的类型。这些配套类型体现了标准库类型与机器无关的特性,类型size_ type 即是其中的一种。在具体使用的时候,通过作用域操作符来表明名字size_ type 是在类string中定义的。

​ 尽管我们不太清楚string::size type类型的细节,但有一点是肯定的:它是一个无符号类型的值(参见2.1.1节,第30页)而且能足够存放下任何string对象的大小。所有用于存放string类的size函数返回值的变量,都应该是string::size_ type类型的。

​ 过去,string::size_ type 这种类型有点儿神秘,不太容易理解和使用。在C++11 新标准中,允许编译器通过auto或者decltype(参见2.5.2节,第61页)来推断变量的类型:auto len = line.size(); // len的类型是string: :size_ type

​ 由于size函数返回的是一个无符号整型数,因此切记,如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果(参见2.1.2节,第33页)。例如,假设n是一个具有负值的int,则表达式s.size()<n的判断结果几乎肯定是true.这是因为负值n会自动地转换成一个比较大的无符号值。

​ 如果一条表达式中已经有了size()函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值