一、字符串最后一个单词的长度
题目链接:字符串最后一个单词的长度
输入处理时,cin 遇到空格会停止读取。若需读取包含空格的整行内容,应使用 getline。
getline 并非成员函数,而是输入流的全局函数 getline(istream&, string&)(定义在 <string> 头文件中),作用是从输入流中读取一整行内容存入 string 对象。
// 基础用法(读整行)
getline(输入流对象,string 对象);
// 扩展用法(读至指定终止符)
getline(输入流对象,string 对象,终止字符);
思路: 获取最后一个单词长度。常规方法从头遍历记录空格位置,但过程冗余。可利用 string 类重载的成员函数 rfind 从末尾向前查找第一个空格。
string类的rfind是从字符串末尾向前查找指定内容的成员函数,返回匹配内容的起始下标(若未找到则返回string::npos)。常用于定位最后一次出现的字符或子串。
- 参数 1:要查找的子串/字符(支持
string、char*、char);- 参数 2:查找的结束位置(默认是
string::npos,即从字符串末尾开始找);- 返回值:匹配内容的起始下标;未找到则返回
string::npos。
逻辑: 用 rfind(' ') 从字符串末尾往前找第一个空格的位置。如果找到空格:最后一个单词的长度 = 字符串总长度 - (空格位置 + 1);如果没找到空格(整个字符串是一个单词):最后一个单词的长度 = 字符串总长度。
#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) {
cout << str.() - (pos + ) << endl;
} {
cout << str.() << endl;
}
;
}


