一、字符串最后一个单词的长度
做题时得注意,cin 读到空格就会停,所以这种带空格的输入得换用 getline。

它不是成员函数,而是输入流的全局函数 getline(istream&, string&)(定义在 <string> 头文件中),作用是从输入流中读取一整行内容,存入 string 对象。
// 基础用法(读整行)
getline(输入流对象,string 对象);
// 扩展用法(读至指定终止符)
getline(输入流对象,string 对象,终止字符);
思路: 要获取最后一个单词的长度,常规做法是遍历字符串遇到空格就跳过并记录位置。这确实可行,但过程冗余。我们可以利用 string 类重载的成员函数 rfind 来优化。
rfind(' ')从字符串末尾往前找第一个空格的位置。如果找到空格:最后一个单词的长度 = 字符串总长度 - (空格位置 + 1);如果没找到空格(整个字符串是一个单词):最后一个单词的长度 = 字符串总长度。
写代码前再简单了解一下 rfind:它是从字符串末尾向前查找指定内容的成员函数,返回匹配内容的起始下标(若未找到则返回 string::npos)。参数 1 是要查找的子串或字符,参数 2 是查找的结束位置(默认从末尾开始),返回值是匹配内容的起始下标。

#include<iostream>
#include<string>
using namespace std;
int main() {
string str;
// cin >> str; //cin 检测到空格或换行就会结束,这里使用 getline
getline(cin, str);
size_t pos = str.rfind(' '); // 找到最后一个空格所处位置
// 如果 pos != string::npos 表示找到了空格
(pos != string::npos) {
cout << str.() - (pos + ) << endl;
} {
cout << str.() << endl;
}
;
}



