C++鲸鱼语言翻译程序输出不符合预期,求助排查原因
问题分析:英文转鲸鱼语言程序输出不符的原因
程序代码
#include <iostream> #include <vector> int main() { std::string human = ""; std::vector <char> translate; std::cout << "Enter English words or sentences to tranlate it into Whale's language.\n"; std::cin >> human; for (int a = 0; a < human.size(); a++){ if (human[a] == 'a' || human[a] == 'i' || human[a] == 'o' || human[a] == '.' || human[a] == ',' || human[a] == '?' || human[a] == '!' || human[a] == ' ' || human[a] == 'A' || human[a] == 'I' || human[a] == 'O' || human[a] == '-'){ translate.push_back(human[a]);} if (human[a] == 'e' || human[a] == 'u' || human[a] == 'E' || human[a] == 'U'){ translate.push_back(human[a]); translate.push_back(human[a]);}} for (int b = 0; b < translate.size(); b++){ std::cout << translate[b];} }
问题说明
该程序预期实现英文内容转鲸鱼语言,规则为:
- 仅保留字符'a'、'i'、'o'、'e'、'u',移除其他所有字符
- 将'e'和'u'的出现次数翻倍
但输入Hello world.时,预期输出eeo o(注:原描述的"eeo o."不符合规则,因为规则要求移除非元音字符),实际仅输出eeo,原因如下:
1. 输入读取不完整
使用std::cin >> human读取输入时,>>运算符会以空白字符(空格、换行等)作为分隔符,仅读取第一个空格前的内容。输入Hello world.时,human变量仅被赋值为Hello,后续的 world.完全未被读取,自然无法处理这部分内容。
2. 代码逻辑与规则冲突
代码中额外保留了., ,, ?, !, , -等非元音字符,这和规则中"仅保留元音字符"的要求不符。即使修复输入问题,输出也会包含这些不符合规则的字符。
修复建议
- 替换输入方式:使用
std::getline(std::cin, human)读取整行输入,包含空格在内的所有字符。若之前有std::cin操作,需先通过std::cin.ignore()处理残留的换行符。 - 修正过滤逻辑:移除对非元音字符的保留判断,仅保留a/i/o/e/u(含大小写),其他字符直接跳过。
内容的提问来源于stack exchange,提问作者鮮綠補腎靈
相关产品推荐
相关产品推荐

