字符串最后一个单词的长度
在 C++ 中处理字符串输入时,cin 遇到空格会停止读取,这往往不符合题目要求。比如输入 "Hello World",cin 只能读到 "Hello"。此时应改用全局函数 getline(cin, str),它能完整读取一行内容。
要获取最后一个单词的长度,常规思路是遍历记录空格位置,但利用 string 类的 rfind 成员函数会更高效。rfind 从后向前查找指定字符,返回其起始下标。若找到空格,长度即为总长减去该位置加一;若未找到(整串无空格),则直接返回总长。注意判断返回值是否为 string::npos,这是表示'未找到'的常量。
#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;
}
验证回文串
判断回文串的核心在于规范化处理:统一大小写并剔除非字母数字字符。虽然标准库有相关函数,但为了理解逻辑,我们可以手动实现过滤过程。
遍历原字符串,将大写字母转为小写(ASCII 码 +32),保留小写字母和数字,构建新串。随后使用双指针,一个从头开始,一个从尾开始,向中间靠拢比较字符。若中途发现不一致,则不是回文串。
class Solution {
public:
bool isPalindrome(string s) {
string blank_string;
for (auto ch : s) {
if (ch >= 'A' && ch <= 'Z') {
blank_string += ch + 32;
} (ch >= && ch <= ) {
blank_string += ch;
} (ch >= && ch <= ) {
blank_string += ch;
}
}
left = ;
right = blank_string.() - ;
(left < right) {
(blank_string[left] != blank_string[right]) {
;
}
left++;
right--;
}
;
}
};


