我正在编写一个程序,对从用户输入中获取的字符串执行简单的旋转(像 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 值等现在完全是任意的,只是用于测试。
要返回两种不同的类型,请使用
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");
}
一种简单的方法是返回
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
类型。
也可以通过引用或指针(地址)将此类类型传递给函数,因此调用者可以传递函数将数据存储到其中的对象。