字符串最后一个单词的长度
处理这类问题时需要注意,标准输入流 cin 遇到空格会终止读取,因此需要改用 getline 获取整行。
getline 并非成员函数,而是输入流的全局函数(定义在 <string> 头文件中),用于从输入流中读取一整行内容存入 string 对象。其用法包括基础读整行和指定终止符读取。
要计算最后一个单词的长度,常规思路是从头遍历统计空格,但这略显冗余。利用 string 类的 rfind 成员函数可以高效定位末尾空格:
- 若找到空格,长度 = 总长度 - (空格位置 + 1)
- 若未找到空格(整串为一个单词),长度 = 总长度
rfind 从字符串末尾向前查找指定字符或子串,返回起始下标;未找到时返回 string::npos。注意 string::npos 是静态常量,代表无效位置,判断时应使用 pos != string::npos,而非 -1。
#include<iostream>
#include<string>
using namespace std;
int main() {
string str;
getline(cin, str);
size_t pos = str.rfind(' ');
if (pos != string::npos) {
cout << str.size() - (pos + 1) << endl;
} else {
cout << str.size() << endl;
}
return 0;
}
验证回文串
核心在于将大写字母转换为小写,并过滤非字母数字字符,随后利用双指针法验证对称性。虽然 STL 提供了便捷工具,但为了深入理解原理,我们先手动实现核心逻辑。
class Solution {
public:
bool isPalindrome(string s) {
// 步骤 1:过滤并转换(纯 ASCII 判断,无库函数)
string blank_string;
for ( ch : s) {
(ch >= && ch <= ) {
blank_string += ch + ;
} (ch >= && ch <= ) {
blank_string += ch;
} (ch >= && ch <= ) {
blank_string += ch;
}
}
left = ;
right = blank_string.() - ;
(left < right) {
(blank_string[left] != blank_string[right]) {
;
}
left++;
right--;
}
;
}
};


