
[C++系列] 50. 迭代器及string类OJ练习
发布日期:2021-05-12 23:13:45
浏览次数:26
分类:精选文章
本文共 3710 字,大约阅读时间需要 12 分钟。
字符串转整数的不同处理方法
将字符串转换为整数的处理方式有多种,以下是一些常用的方法,并附带实际的代码示例。
迭代器方法
使用迭代器的方法可以很好地遍历字符串中的每一个字符。我们可以通过迭代器获取每个字符的值,并根据字符的类型决定如何处理。
#include#include // 包含std::begin和std::endusing namespace std;int StrToInt(string str) { int ret = 0; int flag = 1; auto sit = str.begin(); while (sit != str.end()) { if (*sit == '-' || *sit == '+') { if (*sit == '-') { flag = -1; } ++sit; } else if (sit -> >= '0' && sit -> <= '9') { ret *= 10; ret += (sit -> - '0'); ++sit; } else { return 0; } } return ret * flag;}
范式for循环
C++11引入了新的范围FOR循环,这种方法对于处理字符串中的每个字符尤为简洁高效。
#includeusing namespace std;int StrToInt(string str) { int ret = 0; int flag = 1; // 使用auto提升ожет增加效率 for (auto& c : str) { if (c == '-' || c == '+') { if (c == '-') { flag = -1; } continue; } else if (c >= '0' && c <= '9') { ret *= 10; ret += (c - '0'); } else { return 0; } } return ret * flag;}
运算符方括号
通过直接访问字符串中的字符,可以使用类似于数组的方式进行操作。这种方法简单,适合处理较小规模的字符串。
#includeusing namespace std;int StrToInt(string str) { int ret = 0; int flag = 1; for (int i = 0; i < str.size(); ++i) { if (str[i] == '-' || str[i] == '+') { if (str[i] == '-') { flag = -1; } continue; } else if (str[i] >= '0' && str[i] <= '9') { ret *= 10; ret += (str[i] - '0'); } else { return 0; } } return ret * flag;}
反向操作与substr函数
字符串处理中的反向操作可以通过substr函数实现。在某些场景中,进行反向操作可能更为方便。
#include#include using namespace std;int main() { string s; cin >> s; // 使用rfind找到第一个空格 size_t pos = s.rfind(' '); // 提取最后一个单词 string word = s.substr(pos + 1); // 输出单词的长度 cout << word.size() << endl; return 0;}
寻址与substr函数在网址中的应用
通过find与rfind函数,可以轻松找到字符串中的特定字符位置,并进行截取操作。
#include#include using namespace std;int main() { string files("file.cpp"); size_t pos = files.find('.'); // 返回前一个'.'所在的位置 string subs = files.substr(pos); // 获取从pos开始的后缀 string files("file.cpp.txt.tar.gz.zip"); size_t pos = files.find('.'); size_t rpos = files.rfind('.'); // 返回最后一个'.'的位置 string rsubs = files.substr(rpos); string wnet("http://www.cplusplus.com"); size_t pos2 = wnet.find("/"); // 返回'/'的位置 string domain = wnet.substr(pos2 + 3, pos2 - pos - 3); // 提取域名 cout << domain << endl; return 0;}
回文字符串判断
判断一个字符串是否为回文字符串,需要从前往后以及从后往前查找字符是否相等。
#includeusing namespace std;bool isPalindrome(string s) { if (s.empty()) { return true; } int begin = 0; int end = s.size() - 1; while (begin < end) { while (begin != end) { if (IsNumberOrLetter(s[begin])) { break; } ++begin; } while (begin < end) { if (IsNumberOrLetter(s[end])) { break; } --end; } if (begin < end) { if ((s[begin] + 32 - 'a') % 32 != (s[end] + 32 - 'a') % 32) { return false; } ++begin; --end; } } return true;}bool IsNumberOrLetter(char c) { return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');}
以上是一些关于字符串处理的典型案例和实用技巧,通过不同的方法实现了字符串转整数、反向操作、网址域名提取以及回文判断等功能。这些方法在实际开发中具有一定的参考价值,希望对你有所帮助。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月26日 10时33分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MATLAB中的集合运算
2025-04-12
matlab函数及其功用
2025-04-12
matlab利用guide编写简单计算器界面
2025-04-12
MATLAB利用小波分析提取周期
2025-04-12
matlab功率谱_EEG信号alpha波beta波等的谱密度实现(1)-原理
2025-04-12
matlab图的连通性算法,matlab判别图的连通性.doc
2025-04-12
MATLAB坐标设置:范围、主次坐标等常见问题
2025-04-12
matlab复信道化滤波器组,基于复多相滤波器组的信道化接收机
2025-04-12
MATLAB如何固定text在图中的相对位置
2025-04-12
Matlab安装
2025-04-12
matlab实现LSTM时序预测-ChatGPT4o+mathworks文档
2025-04-12
MATLAB实现主成分分析
2025-04-12
MATLAB实现交叉小波变换
2025-04-12
MATLAB实现各种概率密度函数(概率密度/分布/逆概率分布函数)
2025-04-12
MATLAB实现各种熵:香农熵、条件熵、模糊熵、样本熵等
2025-04-12
MATLAB实现各种离散概率密度函数(概率密度/分布/逆概率分布函数)
2025-04-12
MATLAB实现基于遗传算法/引力搜索算法优化新安江水文模型
2025-04-12
Maven学习总结(23)——Maven常用命令介绍
2025-04-12
maven常用命令集合(收藏大全)
2025-04-13