- 题目详情
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
- 代码
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
while(cin >> s);
cout << s.size();
return 0;
}
- 输入流istream如何控制输入的?
为什么可以使用while(cin >> s)
进行输入咧?
关键在流提取符>>
从流中提取数据时跳过输入流中的空格、tab键、换行符等空白字符。遇到EOF
时才跳出while
循环。
因为>>
会跳过空白符,string s
对象每次接收到的都是一个单词(一整个字符串中的每个单词被用空格间隔开来)。
查看std
下的ios
中有
解读上述代码就是,当输入的字符或者对象是有效的operator void *() const { if(state&(badbit|failbit) ) return 0; return (void* )this; }
goodbit
时,返回当前的对象首地址,如果“出错”了(例如字符对象遇到了数字,或者遇到了EOF
),对应的输入流状态变成了badbit
,failbit
此时返回0
;
🌻Knowledge is Power
cin
是一个istream类型对象,无返回值❗️
他能作为判断语句的原因是istream
类型中的>>
操作符会返回一个istream对象(cin)
如果>>
读到EOF
那么返回的istream对象(cin)中会检测到EOF
的存在
此时std
下的operator bool()
转换函数起作用
将istream对象(cin)转换成bool类型false作为条件判断,以此结束输入。