更改字符串C++中的多个字符
Change multiple character in a string 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,它实际上以理想的方式转换一个char(如果你愿意,可以以函数或类的形式实现)。为此,它使用捕获的一组vowels
和字符change_to
。为了添加更多详细信息,它会检查该字符是否存在于vowels
集中,如果存在,则返回 change_to
,如果不存在,则返回原始字符。
std::transform
从s.begin()
到s.end()
的每个元素调用此lambda,并将结果从s.begin()
开始,即就地存储。
我建议使用std::string
的方法find_first_of
。
例如
#include <iostream>
#include <string>
int main()
{
std::string s("Hola Pepe, com va la vida");
std::string t("aeiou");
char c = '*';
std::cout << s << std::endl;
for (std::string::size_type pos = 0;
(pos = s.find_first_of(t, pos)) != std::string::npos;
++pos)
{
//s.replace(pos, 1, 1, c);
s[pos] = c;
}
std::cout << s << std::endl;
}
程序输出为
Hola Pepe, com va la vida
H*l* P*p*, c*m v* l* v*d*
如果要使用标准算法,那么我认为在这种情况下最合适的算法是 std::replace_if
.例如
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
int main()
{
std::string s("Hola Pepe, com va la vida");
std::set<char> t({ 'a', 'e', 'i', 'o', 'u' });
char c = '*';
std::cout << s << std::endl;
std::replace_if(s.begin(), s.end(),
[&t](char c) { return t.count(c); }, c);
std::cout << s << std::endl;
}
程序输出与上图相同
Hola Pepe, com va la vida
H*l* P*p*, c*m v* l* v*d*
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数