c++ - 更改字符串中的多个字符 C++

标签 c++ eclipse c++11 visual-c++

<分区>

大家早上好,前几天一直在想,一直找不到解决办法。

我需要更改字符串中的几个字符,仅使用字符串类。

我尝试使用替换功能,但只替换了一个字符。

例子:

原始字符串:“Hola Pepe,com va la vida”

输入要替换的字符 a e i o u 输入要替换的字符 *

H * l * P * p *, c * m v * l * v * d *

谢谢大家。

最佳答案

我想说最易读的方法是使用 std::transform 来做你想做的事:

#include <algorithm>
...
std::set<char> vowels = {'a', 'o', 'e', 'i', 'u'};
char change_to = '*';
std::string s = "Hola Pepe, com va la vida";
auto transformation_operation = [vowels, change_to](char c)
{
    return vowels.count(c) ? change_to : c;
};
std::transform(s.begin(), s.end(), s.begin(), transformation_operation);

此处 transformation_operation 是一个 lambda,它实际上以理想的方式转换一个字符(如果您愿意,可以以函数或类的形式实现)。为此,它使用捕获的一组 vowels 和字符 change_to。要添加更多细节,它会检查该字符是否存在于 vowels 集中,如果存在,则返回 change_to,如果不存在,则返回原始字符。

std::transform 为从 s.begin()s.end() 的每个元素调用此 lambda,存储结果开始用s.begin(),即到位。

关于c++ - 更改字符串中的多个字符 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631002/

相关文章:

C++ - 从缓冲区读取数据

c++ - 从用户输入范围输出素数的数量

c++ - 从 HGDIOBJ 到 HBRUSH 的转换

c++ - C++ 预处理器中的 R 和 L 有什么特别之处?

c++ - Linux通过pid获取窗口图标

java - 访问 IType 的导入声明

Eclipse INI配置问题

c++ - 在没有堆分配的情况下使用虚拟方法实例化类

multithreading - std::this_thread::yield()用法?

eclipse - 在Eclipse中,何处更改选定事件的突出显示颜色?