Koi*_*Koi 2 c++ string algorithm stl
今天我在学校项目上遇到了一个逻辑错误.对于这个项目,chars需要切换.
比如说,用户输入字母A.它切换到了U,一切都很顺利.但是,当用户输入该字母时会出现此问题U.角色保持不变.我实现了两个规则,从交换机A到U和U到A.字符串通过两个规则,因此不变.我怎么能阻止这个?
#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
有了您的实施,替换A到U再U 回到 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如果input是U;U如果input是A;input 除此以外.如果它是一个自由函数,你应该怎么称它?那么,为什么不是一个自我描述的名字swapAandU呢?