以常量参考作为输入的函数

Function with constant reference as input

我正在尝试创建一个函数,该函数将字符串的常量引用作为输入,returns 字符串的每个字符向右旋转 1 位后的字符串。使用引用和指针仍然让我感到困惑,我不确定如何从常量引用中获取字符串。

string rotate(const string &str){
     string *uno =  &str;
     string dos = rotate(uno.rbegin(), uno.rbegin() + 1, uno.rend());
     return dos;}

这是我目前得到的,但无法编译。任何有关如何从常量引用中正确获取字符串的提示都将不胜感激。

string* uno = string &str;

没有意义。我想你的意思是

string* uno = const_cast<string*>(&str);

如果不违反参数上的 const 约定,您无法就地执行旋转,因此您应该复制输入和 return 一个新字符串:

string rotate(const string &str){
     string uno = str;
     rotate(uno.rbegin(), uno.rbegin() + 1, uno.rend());
     return uno;
}

另一个合理的选择是使用 std::rotate_copy

您可以考虑轮换:

// rotate last char to front
std::string rotate(const std::string& str)
{
   return(str[str.size()-1]  + 
          str.substr(0,str.size()-1));
}

// 'abcdefghijklmnopqrstuvwxyz'
// 'zabcdefghijklmnopqrstuvwxy'

您可以传入一个字符串来接收旋转后的字符串,从而避免 return 按值复制。

我通过指针传递了字符串,因为它在调用站点上更清楚它打算被更改,但如果愿意,它可以很容易地通过引用传递。

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

void rotate(std::string const& str, std::string* out)
{
     *out = str;
     std::rotate(out->rbegin(), out->rbegin() + 1, out->rend());
}

int main(int, char**)
{
    std::string out;

    std::string x = "1234567";
    std::cout << x << '\n';

    ::rotate(x, &out);

    std::cout << out << '\n';
}