如何使用特定符号C ++查找和替换字符串中的所有字符

时间:2013-10-23 15:46:10

标签: c++ replace

我是编程的初学者,所以如果我以错误的方式解决问题,请放轻松。我这样做是作为一项任务。我的目的是从用户获取一个字符串并用另一个符号替换所有字符。下面的代码应该找到所有的As然后用* s替换。我的代码显示出完全出乎意料的结果另外_deciphered.length()的目的是什么。

例如: “我是一个男孩”应该变成“我* m * b * d boy”

然后我应该为所有大写和小写字母和数字实现它,并用不同的符号替换,反之亦然,以制作一个小的Encode-Decode程序

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

3 个答案:

答案 0 :(得分:4)

由于您似乎已经在使用标准库,

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

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

如果您需要手动执行此操作,请记住std::string看起来像char的容器,因此您可以迭代其内容,检查每个元素是否为{{1如果是,请将其设置为'A'

工作示例:

'*'

输出:

  

FooBarro

     

f **巴尔*

答案 1 :(得分:1)

您可以使用std::replace

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

此外,如果您想要替换符合特定条件的多个值,则可以使用std::replace_if

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

如果字符与要替换的条件匹配,则myPredicate返回true。例如,如果您要同时替换aAmyPredicate应返回truea的{​​{1}}以及其他A字符。

答案 2 :(得分:0)

我个人会使用正则表达式替换来用*

替换“A或an”

请看一下这个答案:Conditionally replace regex matches in string