std :: replace的逻辑错误

Koi*_*Koi 2 c++ string algorithm stl

今天我在学校项目上遇到了一个逻辑错误.对于这个项目,chars需要切换.

比如说,用户输入字母A.它切换到了U,一切都很顺利.但是,当用户输入该字母时会出现此问题U.角色保持不变.我实现了两个规则,从交换机AUUA.字符串通过两个规则,因此不变.我怎么能阻止这个?

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

using namespace std;

int main()
{
 string seq;
 getline(cin, seq);

 transform ( seq.begin(), seq.end(), seq.begin(), ::toupper );

 replace ( seq.begin(), seq.end(), 'A', 'U' );
 replace ( seq.begin(), seq.end(), 'U', 'A' );

 cout << seq;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

YSC*_*YSC 10

有了您的实施,替换AUU 回到 A:

replace ( seq.begin(), seq.end(), 'A', 'U' );
replace ( seq.begin(), seq.end(), 'U', 'A' );
Run Code Online (Sandbox Code Playgroud)

您需要在一次通过中进行替换,例如std::transform:

std::transform(begin(seq), end(seq), begin(seq), some_function_object);
Run Code Online (Sandbox Code Playgroud)

你只需写下这个神秘的东西some_function_object.它可以是一个自由功能:

char some_function_object(char input) { /* ... */ }
std::transform(begin(seq), end(seq), begin(seq), some_function_object);
Run Code Online (Sandbox Code Playgroud)

或lambda函数:

std::transform(begin(seq), end(seq), begin(seq), [](char input) { /* ... */ } );
Run Code Online (Sandbox Code Playgroud)

这个函数对象必须带一个char并返回:

  • A如果inputU;
  • U如果inputA;
  • input 除此以外.

如果它是一个自由函数,你应该怎么称它?那么,为什么不是一个自我描述的名字swapAandU呢?