📅  最后修改于: 2023-12-03 14:49:46.991000             🧑  作者: Mango
在 C++ 中,可以使用 STL 中的算法和字符串操作函数轻松地从字符串中删除指定字符。我们将介绍下面三种方法:
使用 std::remove_if
和 std::string::erase
。
使用 std::remove_copy_if
和 std::string
。
使用 std::remove_copy
和 std::string
。
std::remove_if
和 std::string::erase
std::remove_if
是一个非常有用的算法,可以在指定的范围内删除满足条件的元素,该算法返回指向新范围的迭代器,新范围包括已删除元素后的其余元素。std::string::erase
是一个成员函数,用于从字符串中删除元素。
下面是删除字符串中所有空格的示例:
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string str = "remove all spaces from this string";
str.erase(std::remove_if(str.begin(), str.end(),
[](auto c) { return std::isspace(c); }),
str.end());
std::cout << str << std::endl;
return 0;
}
这段代码中,我们传递给 std::remove_if
一个 lambda 表达式,该表达式判断输入的字符是否为空格字符。如果是空格字符,则返回 true
,std::remove_if
将从字符串中删除该字符。最后,我们将 std::string::erase
函数的返回值传递给 std::cout
,以打印删除所有空格后的字符串。
输出:
removeallspacesfromthisstring
std::remove_copy_if
和 std::string
std::remove_copy_if
与 std::remove_if
类似,也可以用于删除指定范围内的元素。但是,这个算法不会改变原始序列,而是在另一个序列中生成停止删除的新序列。std::remove_copy_if
的返回值是指向新序列的结尾的迭代器。
下面是使用 std::remove_copy_if
从字符串中删除所有空格的示例:
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string str = "remove all spaces from this string";
std::string result;
std::remove_copy_if(str.begin(), str.end(), std::back_inserter(result),
[](auto c) { return std::isspace(c); });
std::cout << result << std::endl;
return 0;
}
这段代码使用 std::back_inserter
插入器,将 std::remove_copy_if
删除的元素添加到 result
字符串中。由于 result
是空字符串,因此 std::back_inserter
插入器将元素添加到字符串的结尾处。
输出:
removeallspacesfromthisstring
std::remove_copy
和 std::string
std::remove_copy
与 std::remove_copy_if
类似,它将源序列中指定范围内不满足条件的元素复制到目标序列中,并返回指向目标序列末尾的迭代器。
下面是使用 std::remove_copy
从字符串中删除所有空格的示例:
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string str = "remove all spaces from this string";
std::string result(str.size(), '\0');
auto new_end = std::remove_copy(str.begin(), str.end(), result.begin(),
' '); // remove spaces
result.erase(new_end, result.end());
std::cout << result << std::endl;
return 0;
}
在这个例子中,我们使用 std::remove_copy
将源字符串中不是空格字符的所有字符复制到 result
字符串中。指定的删除条件是空格字符。在 std::remove_copy
执行后,我们使用 std::string::erase
从 result
字符串中删除不需要的元素。
输出:
removeallspacesfromthisstring
以上就是使用 STL 从字符串删除所有出现的字符的三种方法。哪种方法更好取决于具体的情况,但无论哪种方法,都可以使用 STL 算法和字符串操作函数轻松地完成任务。