[C++系列] 50. 迭代器及string类OJ练习
发布日期:2021-05-12 23:13:45 浏览次数:26 分类:精选文章

本文共 3710 字,大约阅读时间需要 12 分钟。


字符串转整数的不同处理方法

将字符串转换为整数的处理方式有多种,以下是一些常用的方法,并附带实际的代码示例。

迭代器方法

使用迭代器的方法可以很好地遍历字符串中的每一个字符。我们可以通过迭代器获取每个字符的值,并根据字符的类型决定如何处理。

#include 
#include
// 包含std::begin和std::end
using 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循环,这种方法对于处理字符串中的每个字符尤为简洁高效。

#include 
using 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;
}

运算符方括号

通过直接访问字符串中的字符,可以使用类似于数组的方式进行操作。这种方法简单,适合处理较小规模的字符串。

#include 
using 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;
}

回文字符串判断

判断一个字符串是否为回文字符串,需要从前往后以及从后往前查找字符是否相等。

#include 
using 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');
}

以上是一些关于字符串处理的典型案例和实用技巧,通过不同的方法实现了字符串转整数、反向操作、网址域名提取以及回文判断等功能。这些方法在实际开发中具有一定的参考价值,希望对你有所帮助。

上一篇:[C++系列] 49. C++迭代器(STL迭代器)iterator详解
下一篇:[C++系列] 48. string类基础知识点

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月26日 10时33分09秒