如何查找和替换特定符号下的字符串中的所有字符++(How to find and replace a

2019-10-18 19:53发布

我在编程初学者所以慢慢来,如果我在一个错误的方式走近这个问题。 我这样做的一项任务。 我的目的是从用户获得一个字符串并将取代所有其他符号的字符。 下面的代码应该找到所有的作为,并与* S然后更换。 我的代码表明完全意想不到的结果。 还什么是_deciphered.length()的目的。

例如:“我是一个坏男孩”应该变成“我* M * B * d男孩”

那么我应该实现它所有的大写和小写字母和数字,并用不同的符号,反之亦然更换,使一个小编码 - 解码方案

#include <iostream>
#include <string>
using namespace std;
string cipher (string);
void main ()
{

    string ciphered, deciphered;
    ciphered="String Empty";
    deciphered="String Empty";
    cout<<"Enter a string to \"Encode\" it : ";
    cin>>deciphered;
    ciphered=cipher (deciphered);
    cout<<endl<<endl;
    cout<<deciphered;
}
string cipher (string _deciphered)
{
    string _ciphered=(_deciphered.replace(_deciphered.find("A"), _deciphered.length(), "*"));
    return _ciphered;
}

Answer 1:

既然你似乎可以用标准库已经,

#include <algorithm> // for std::replace

std::replace(_deciphered.begin(), _deciphered.end(), 'A', '*');

如果您需要手工做到这一点,那么记住,一个std::string看起来像一个容器char ,这样你就可以遍历其内容,检查每一个元素是'A' ,如果是这样,将其设置为'*'

工作示例:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
  std::string s = "FooBarro";
  std::cout << s << std::endl;
  std::replace(s.begin(), s.end(), 'o', '*');
  std::cout << s << std::endl;
}

输出:

FooBarro

f ** *巴尔



Answer 2:

您可以使用std::replace

std::replace(deciphered.begin(), deciphered.end(), 'A', '*');

此外,您还可以使用std::replace_if如果你想更换符合特定条件的多个值。

std::replace_if(deciphered.begin(), deciphered.end(), myPredicate, '*');

其中, myPredicate返回true如果匹配字符被替换的标准。 因此,举例来说,如果你想更换两节aAmyPredicate应该返回trueaA假的其他字符。



Answer 3:

我会亲自使用正则表达研究,以取代repace“A或”带*

看看这个答案有些指针: 有条件更换正则表达式匹配字符串



文章来源: How to find and replace all characters in a string with specific symbols C++
标签: c++ replace