You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者鮮綠補腎靈

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:18:22