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

时间:2017-01-26 11:33:25

标签: c++ function return

我正在编写一个程序,对从用户输入获取的字符串执行简单的旋转(如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值等现在完全是任意的,只是用于测试。

2 个答案:

答案 0 :(得分:3)

要返回两种不同类型,请使用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<T1,T2,...,Tn> foo(){
    return std::make_pair(v1,v2,...,Tn);
}

要返回更多而不是两种不同类型,请使用 std :: tuple

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

示例:

protected void onActivityResult(int requestCode, int resultCode,
                                    Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
        Uri selectedImageUri = null;
        Uri selectedImage;

        String filePath = null;
        switch (requestCode) {
            case SELECT_FILE:
                if (resultCode == Activity.RESULT_OK) {
                    selectedImage = imageReturnedIntent.getData();
                    if (requestCode == SELECT_FILE) {
                        if (selectedImage != null) {
                            InputStream imageStream = null;
                            try {
                                imageStream = getContentResolver().openInputStream(
                                        selectedImage);
                            } catch (FileNotFoundException e) {
                                e.printStackTrace();
                            }

                            Bitmap bmp = BitmapFactory.decodeStream(imageStream);

                            imagenes.add(bmp);
                            imagenesUri.add(selectedImage);
                            adapter.notifyDataSetChanged();
                        }
                    }
                }
                break;
        }
    }

答案 1 :(得分:1)

一种简单的方法是返回structclass类型。

 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。这些都是专门的structclass类型。

也可以通过引用或指针(地址)将这些类型传递给函数,这样调用者就可以传递函数存储数据的对象。