C++ 更改字符串C+中的多个字符+;

C++ 更改字符串C+中的多个字符+;,c++,eclipse,c++11,visual-c++,C++,Eclipse,C++11,Visual C++,大家早上好,前几天我在想,我找不到解决办法 我需要更改字符串中的几个字符,只使用string类 我尝试使用replace函数,但只替换一个字符 例如: 原始字符串:“Hola Pepe,com va la vida” 输入要替换的字符 我爱你 输入要替换的字符 * H*l*p*p*,c*m v*l*v*d* 谢谢大家。我想说,做你想做的事情,最具可读性的方法是使用: #包括 ... set元音={'a','o','e','i','u'}; 字符更改_为='*'; std::string s=“H

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

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

我尝试使用replace函数,但只替换一个字符

例如:

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

输入要替换的字符 我爱你 输入要替换的字符 *

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


谢谢大家。

我想说,做你想做的事情,最具可读性的方法是使用:

#包括
...
set元音={'a','o','e','i','u'};
字符更改_为='*';
std::string s=“Hola Pepe,com va la vida”;
自动转换_操作=[元音,将_更改为](字符c)
{
返回元音。计数(c)?将_改为:c;
};
std::transform(s.begin()、s.end()、s.begin()、transformation_操作);
这里的
transformation\u操作
是一个lambda,它实际上以理想的方式转换一个字符(如果您愿意,可以以函数或类的形式实现)。为此,它使用捕获的一组
元音
和字符
change_To
。要添加更多细节,它会检查
元音
集中是否存在该字符,如果存在,则返回
change_To
,如果不存在,则返回原始字符


std::transform
为从
s.begin()
s.end()
的每个元素调用这个lambda,存储从
s.begin()
开始的结果,也就是说,在适当的位置。

我想说,执行所需操作的最可读的方法是使用:

#包括
...
set元音={'a','o','e','i','u'};
字符更改_为='*';
std::string s=“Hola Pepe,com va la vida”;
自动转换_操作=[元音,将_更改为](字符c)
{
返回元音。计数(c)?将_改为:c;
};
std::transform(s.begin()、s.end()、s.begin()、transformation_操作);
这里的
transformation\u操作
是一个lambda,它实际上以理想的方式转换一个字符(如果您愿意,可以以函数或类的形式实现)。为此,它使用捕获的一组
元音
和字符
change_To
。要添加更多细节,它会检查
元音
集中是否存在该字符,如果存在,则返回
change_To
,如果不存在,则返回原始字符


std::transform
为从
s.begin()
s.end()
的每个元素调用这个lambda,存储从
s.begin()
开始的结果,也就是说,在适当的位置。

我建议使用
std::string
的方法
首先查找

比如说

#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;
}
#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;
}
如果要使用标准算法,那么我认为在这种情况下最合适的算法是
std::replace\u If
。比如说

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

我建议使用
std::string
的方法
find\u first\u 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;
}
#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;
}
如果要使用标准算法,那么我认为在这种情况下最合适的算法是
std::replace\u If
。比如说

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

为什么不遍历所有字符串并在必要时更改字符?请向我们展示您迄今为止的尝试。所以不是代码编写服务,也请先阅读@Kinyu 96使用方法find__of@Kinyu96“几天前,我在想”-你应该更频繁地思考。:)从问题的开头删除“早上好”,在午夜阅读问题,:-)为什么不迭代所有字符串并在必要时更改字符?请向我们展示你迄今为止的尝试。所以不是代码编写服务,也请先阅读@Kinyu 96使用方法find__of@Kinyu96“几天前我在想”——你应该更频繁地思考。:)从你问题的开头去掉“早上好”,在午夜阅读问题,:-)使用
std::find_first_of
的解决方案在大型计算机上的性能较差strings@alexeykuzmin0对于大字符串,您可以使用std::replace_,如果我在回答中显示的那样。使用
std::find_first_of
的解决方案在大字符串上的性能会很差strings@alexeykuzmin0对于大字符串,可以使用std::replace_,如果我在回答。