以常量引用作为输入的函数

Function with constant reference as input

本文关键字:输入 函数 常量 引用      更新时间:2023-10-16

我试图使一个函数,以字符串的常量引用作为输入,并返回字符串的每个字符旋转1位后的字符串。使用引用和指针仍然让我感到困惑,我不确定如何从常量引用中获得字符串。

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

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

如果不违反关于参数的const合同,则无法执行原地旋转,因此您应该复制输入并返回一个新字符串:

string rotate(const string &str){
     string uno = str;
     rotate(uno.rbegin(), uno.rbegin() + 1, uno.rend());
     return uno;
}
另一个合理的选择是使用std::rotate_copy

string* uno = string &str;

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

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

您可以考虑这样旋转:

// 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'

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

我通过指针传递字符串,因为在调用处更清楚地表明它打算被修改,但如果愿意的话,可以很容易地通过引用传递它。

#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';
}