提问者:小点点

函数随机转换字符到大小写


我重温了在线课程中的一个练习,我们创建了一个‘鲸鱼翻译器’,它检查用户输入的每个字符,只提取/返回元音。

我认为将返回的值随机大写会很有趣,所以整个事情感觉有点像多莉说话的鲸鱼(海底总动员),所以我创建了一个函数,根据随机数是奇数还是偶数将每个字符转换为大写。 事情是,我不能让程序承认或使用我的功能。 不然就没问题了。

有人能告诉我我哪里出错了吗?

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

char converter(char);

int main() {

    std::cout << "WeELCooOmE ToOOoO the WHaALe translaAtoOor \n";

    std::cout << "\n PlEaAsE EnntEer yoOur text tOo beEE trAanslaAateEd \n\n";

    std::string input;

    std::getline(std::cin, input);

    std::cout << "\n";

    std::vector<char> vowels;

    vowels.push_back('a');
    vowels.push_back('e');
    vowels.push_back('i');
    vowels.push_back('o');
    vowels.push_back('u');

    std::vector<char> whale_talk;

    for (int i = 0; i < input.size(); i++) {

       for (int j = 0; j < vowels.size(); j++) {

            if (input[i] == vowels[j]) {


                whale_talk.push_back(input[i]);

            }

        }

    }

    std::cout << "HeEre iS yOoUr translaAtiOn..\n\n";

    for (int k = 0; k < whale_talk.size(); k++) { 

        converter(whale_talk[k]);
        std::cout << whale_talk[k];

    }

    std::cout << "\n";

}

char converter(char x) {     //function to convert characters toupper based on random number generation.                  

    int rando = rand() % 100;

    if (rando % 2 == 0) {

        x = toupper(x);
        return x;
    }

    else {

        return x;
    }
}

共3个答案

匿名用户

这是因为你把字符传递给函数的方式。

converter(&whale_talk[k]);

和:

char converter(char * x) {         
    int rando = rand() % 100;
    if (rando % 2 == 0) {
        *x = toupper(*x);
        return *x;
    }
}

你所改变的实际上是特性的一个副本,并且它对原始数组没有影响。

还可以将函数更改为void,因为您没有使用返回值。

匿名用户

您的converter函数正在返回修改后的char,但您从未在for循环中使用返回的值:

converter(whale_talk[k]);

您需要做:

whale_talk[k] = converter(whale_talk[k]);

这是一个演示。

或者,您可以保持调用站点的原样,但通过引用传递要转换的char,如下所示:

void converter(char &x) {    // << pass by reference
 // and modify x, but don't return it
}

这是一个演示。

匿名用户

您忽略converter的retun值,因此它没有任何作用。

这个

converter(whale_talk[k]);
std::cout << whale_talk[k];

应该是

std::cout << converter(whale_talk[k]);