我在编程初学者所以慢慢来,如果我在一个错误的方式走近这个问题。 我这样做的一项任务。 我的目的是从用户获得一个字符串并将取代所有其他符号的字符。 下面的代码应该找到所有的作为,并与* 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;
}
既然你似乎可以用标准库已经,
#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 ** *巴尔
您可以使用std::replace
std::replace(deciphered.begin(), deciphered.end(), 'A', '*');
此外,您还可以使用std::replace_if
如果你想更换符合特定条件的多个值。
std::replace_if(deciphered.begin(), deciphered.end(), myPredicate, '*');
其中, myPredicate
返回true
如果匹配字符被替换的标准。 因此,举例来说,如果你想更换两节a
和A
, myPredicate
应该返回true
为a
和A
假的其他字符。
我会亲自使用正则表达研究,以取代repace“A或”带*
看看这个答案有些指针: 有条件更换正则表达式匹配字符串
文章来源: How to find and replace all characters in a string with specific symbols C++