行业网站产品选择,做家政在哪个网站找,竞价推广教程,地产网站模板【C/C】速通涉及string类的经典编程题 一.字符串最后一个单词的长度代码实现#xff1a;#xff08;含注释#xff09; 二.验证回文串解法一#xff1a;代码实现#xff1a;#xff08;含注释#xff09; 解法二#xff1a;#xff08;推荐#xff09;1. 函数isalnum… 【C/C】速通涉及string类的经典编程题 一.字符串最后一个单词的长度代码实现含注释 二.验证回文串解法一代码实现含注释 解法二推荐1. 函数isalnum介绍2. 函数tolower介绍3. 代码实现 三.翻转字符串II区间部分翻转代码实现含注释 四.翻转字符串III翻转字符串中的单词代码实现含注释 一.字符串最后一个单词的长度
本题牛客网链接 原理从字符串最后倒着往前遍历遇到第一个空格标记其下标 代码实现含注释
#include iostream
using namespace std;
#include string
int main() {string s;getline(cin, s);//读取一整行数据遇到空格或“\0”照样读取int ret s.rfind( , s.size() - 1);if(ret s.size())//只有一个字符时printf(%lld,ret);elseprintf(%lld,(s.size() - 1 - ret));
}二.验证回文串
本题LeetCode链接
解法一 原理先将字符串中大写字符转化为对应小写字符然后将数字和字符注意不可拷贝空格拷贝到tmp对象中用双指针分别从tmp对象首尾开始向字符串中间遍历遍历过程中判断两指针指向字符是否相等 代码实现含注释
class Solution {
public:
bool isPalindrome(string s) {string tmp;//将大写字母转化为小写for (int i 0; i s.size(); i){if (s[i] A s[i] Z){s[i] 32;}}int k 0;for (int k 0; k s.size(); k)//看题看题字符和数字都要拷贝到tmp中{if ((s[k] a s[k] z) ||(s[k] 0 s[k] 9) s[k] ! )tmp s[k];}//双指针法int begin 0, end tmp.size() - 1;while (begin end){if (tmp[begin] ! tmp[end])return false;begin;end--;}return true;
}
};解法二推荐 原理充分运用库函数的特性再结合反向迭代器 1. 函数isalnum介绍
函数原型bool isalnum(auto ch);函数功能 1 检查范围isalnum函数检查传入的字符是否属于字母大写或小写或数字0-9)的ASCII码范围。 2返回值如果字符是字母或数字则返回非零值通常为真值否则返回零表示假值。
2. 函数tolower介绍
函数原型auto tolower(auto ch);函数功能将大写字母转换为小写字母。
3. 代码实现
class Solution {
public:
bool isPalindrome(string s) {string tmp;for(auto ch : s){if(isalnum(ch))//函数isalnum{tmp tolower(ch);//函数tolower}}string tmp_rev(tmp.rbegin(), tmp.rend());return tmp tmp_rev;
}
};三.翻转字符串II区间部分翻转
本题LeetCode链接 原理充分运用reverse函数特殊情况特殊处理注意把控区间边界 代码实现含注释
class Solution {
public:string reverseStr(string s, int k) {int ps 0;if(k s.size())//特殊情况一{reverse(s.begin(), s.end());return s;}if(ps 2*k s.size())//特殊情况二{reverse(s.begin(), s.begin() k);return s;}while (ps 2*k s.size())//边界问题等于不可少{reverse(s.begin() ps, s.begin() ps k);ps 2 * k;if (ps k s.size()){reverse(s.begin() ps, s.end());}if (ps 2 * k s.size() ps k s.size())//边界问题等于不可少{reverse(s.begin() ps, s.begin() ps k);}}return s;
}
};四.翻转字符串III翻转字符串中的单词
本题LeetCode链接 原理充分运用reverse函数首尾单词特殊处理注意区间边界 代码实现含注释
class Solution {
public:string reverseWords(string s) {int len 0;//单词的长度int k 0;//单词首字母下标for(int i 0; i s.size(); i){if(k 0 s[i] )//解决第一个单词的颠倒{len i - k; reverse(s.begin() k, s.begin() k len );k i;}if(s[i] )//解决中间单词的颠倒{len i - k 1;reverse(s.begin() k , s.begin() k len );k i;}}//解决最后一个单词的颠倒int j s.rfind( , s.size() - 1);reverse(s.begin() j 1, s.end());return s;}
};