将字符随机转换为大写的函数
Function to randomly convert chars toupper case
我正在重温在线课程中的练习,我们在该课程中创建了一个 'Whale translator' 检查用户输入的每个字符并仅提取/returns 元音。
我认为让返回值随机大写会很有趣,这样整个事情会感觉有点像多莉说话的鲸鱼(海底总动员)所以我创建了一个函数来获取每个字符并将它们转换为基于大写关于随机数是奇数还是偶数。问题是我无法让程序确认或使用我的功能。否则运行正常。
有人可以指点我哪里出错了吗?
#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;
}
}
您 converter
函数返回修改后的 char
但您从未在 for 循环中使用返回值:
converter(whale_talk[k]);
您需要做的:
whale_talk[k] = converter(whale_talk[k]);
这是一个demo。
或者,您可以保持调用站点不变,但传递 char
以通过引用进行转换,如下所示:
void converter(char &x) { // << pass by reference
// and modify x, but don't return it
}
这里是 demo。
你忽略了converter
的返回值,所以没有效果。
这个
converter(whale_talk[k]);
std::cout << whale_talk[k];
应该是
std::cout << converter(whale_talk[k]);
我正在重温在线课程中的练习,我们在该课程中创建了一个 'Whale translator' 检查用户输入的每个字符并仅提取/returns 元音。
我认为让返回值随机大写会很有趣,这样整个事情会感觉有点像多莉说话的鲸鱼(海底总动员)所以我创建了一个函数来获取每个字符并将它们转换为基于大写关于随机数是奇数还是偶数。问题是我无法让程序确认或使用我的功能。否则运行正常。
有人可以指点我哪里出错了吗?
#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;
}
}
您 converter
函数返回修改后的 char
但您从未在 for 循环中使用返回值:
converter(whale_talk[k]);
您需要做的:
whale_talk[k] = converter(whale_talk[k]);
这是一个demo。
或者,您可以保持调用站点不变,但传递 char
以通过引用进行转换,如下所示:
void converter(char &x) { // << pass by reference
// and modify x, but don't return it
}
这里是 demo。
你忽略了converter
的返回值,所以没有效果。
这个
converter(whale_talk[k]);
std::cout << whale_talk[k];
应该是
std::cout << converter(whale_talk[k]);