例如,通过在字母表中向前移动两个字母来从“ Hi”转换为“ Jk”。
到目前为止,我已经尝试过了:
string myString = 'Hello';
string shifted = myString + 2;
cout << shifted << endl;
Run Code Online (Sandbox Code Playgroud)
这适用于字符,但不会对字符串做任何事情。还有其他有用的方法吗?
使用std::transform
。
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string s("hello");
std::transform(s.begin(), s.end(), s.begin(),
[](unsigned char c) -> unsigned char { return c + 2; });
// if you don't want to flush stdout, you may use "\n" instead of "\n"
std::cout << s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理是使用每个字符上的回调进行操作,并就地转换字符串。
回调仅向无符号字符加2:
[](unsigned char c) -> unsigned char { return c + 2; }
Run Code Online (Sandbox Code Playgroud)
其余的只是:
std::transform(s.begin(), s.end(), s.begin(), callback);
Run Code Online (Sandbox Code Playgroud)
简单,可扩展且易于阅读。