如何在C ++ 17中移动字符串的字母?

Hal*_*ent 0 c++ c++17

例如,通过在字母表中向前移动两个字母来从“ Hi”转换为“ Jk”。

到目前为止,我已经尝试过了:

string myString = 'Hello';
string shifted = myString + 2;
cout << shifted << endl;
Run Code Online (Sandbox Code Playgroud)

这适用于字符,但不会对字符串做任何事情。还有其他有用的方法吗?

Ale*_*agh 5

使用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)

简单,可扩展且易于阅读。

  • 使用`std :: transform`是唯一正确的答案。也可以争辩处理诸如将字母的末尾设置为尾的情况(例如“'z'+ 2”),但是OP没有提到这种情况 (2认同)