在 C++ 函数中返回两种不同类型的两个值

问题描述 投票:0回答:2

我正在编写一个程序,对从用户输入中获取的字符串执行简单的旋转(像 rot13 一样)。我的问题是,我想每次将字符串的 ASCII 值中的每个字符更改不同的量 - 因此我使用 for 循环来遍历字符串,并调用每次生成随机数的函数。但是,我希望能够返回这个数字,以便我可以在以后“解读”该字符串。显然,我还需要返回字符串。

这是我的代码:

int ranFunction()
{

    int number = rand() % 31;
    return number;

}

string rotFunction(string words)
{
    int upper_A = 65;
    int lower_z = 122;
    int rand_int = 0;

    for (int i = 0; i < words.length(); i++)
    {
        rand_int = ranFunction();

        if (words[i] >= upper_A && words[i] <= lower_z) {

            words[i] -= rand_int;


        }

    }
    return words; 
}

我希望 rotFunction 返回单词和一个基于 rand_int 每次发生的整数。

请注意:我使用的数字 RE: ascii 值等现在完全是任意的,只是用于测试。

c++ function return
2个回答
6
投票

要返回两种不同的类型,请使用

std::pair

std::pair<T1,T2> foo(){
    return std::make_pair(v1,v2);
}

示例:

std::pair<int,float> foo(){
    return std::make_pair(5,0.5f);
}

要返回超过两种不同类型的更多,请使用

std::tuple
:

std::tuple<T1,T2,...,Tn> foo(){
    return std::make_tuple(v1,v2,...,vn);
}

示例:

std::tuple<int,float,std::string> foo(){
    return std::make_tuple(5,0.5f,"sss");
}

4
投票

一种简单的方法是返回

struct
class
类型。

 struct rotReturn
 {
      int ran;
      std::string str;
 };

 rotReturn rotFunction(std::string words)
 {
     // what you have, except for the return
     rotReturn retval
     retval.ran = rand_int;
     retval.str = words;
     return retval;
 }

显然,可以优化并使用函数内返回的结构,而不是为中间结果使用单独的变量。

替代方案包括返回

std::pair<int, std::string>
或(为了捆绑更多值)
std::tuple
。这两种都是专门的
struct
class
类型。

也可以通过引用或指针(地址)将此类类型传递给函数,因此调用者可以传递函数将数据存储到其中的对象。

© www.soinside.com 2019 - 2024. All rights reserved.