
一、字符串最后一个单词的长度
这里我们看题目有一个注意点就是我们平常使用 cin 输入时遇到空格会停下来,在例子中我们可以看到它有 A B C D,如果我们使用 cin 在遇到第一个 A 之后就会报错,所以这里我们要用到另一种输入方式:getline

它并不是一个成员函数,而是输入流的全局函数 getline(istream&, string&)(定义在 <string> 头文件中),作用是从输入流中读取一整行内容,存入 string 对象。
// 基础用法(读整行) getline(输入流对象,string 对象);
// 扩展用法(读至指定终止符) getline(输入流对象,string 对象,终止字符);
思路:我们要读取最后一个单词的长度,大家肯定会想到我们从第一个字母开始遍历,遇到空格就跳过并且记录一下,直到遍历完整个字符串,然后我们就可以知道了有几个空格,找到最后一个空格所处的位置,然后记录下最后一个单词的长度即可,这确实是个可行的方法,但是过程过于冗余了,我们可以利用 string 类中重载的一个成员函数 rfind:
用
rfind(' ')从字符串末尾往前找第一个空格的位置;如果找到空格:最后一个单词的长度 =字符串总长度 - (空格位置 + 1)(因为空格的下一个位置是最后一个单词的开头);如果没找到空格(整个字符串是一个单词):最后一个单词的长度 =字符串总长度。
下面我们写代码前再去简单了解一下 rfind 成员函数:
string类的rfind是从字符串末尾向前查找指定内容的成员函数,返回匹配内容的起始下标(若未找到则返回string::npos),常用于定位最后一次出现的字符 / 子串。参数 1:要查找的子串 / 字符(支持string、char*、char);参数 2:查找的结束位置(默认是string::npos,即从字符串末尾开始找);返回值:匹配内容的起始下标;未找到则返回string::npos(一个代表'无位置'的常量)




