【问题标题】:Pig Latin - strings猪拉丁语 - 弦乐
【发布时间】:2014-11-29 20:59:15
【问题描述】:

所以我应该使用 stringConvertToPigLatin(string word) 函数将英语单词转换为 Pig Latin。我在互联网上找到的所有答案都是使用 char[],我不允许这样做。 如果第一个字母是元音,该程序应该以添加 -way 开始,如果它是辅音,则添加 -ay。问题是它总是添加“-way”,即使我的“单词”根本没有元音。我究竟做错了什么?这是我的功能:

string ConvertToPigLatin(string word)
{
char first = word.at(0);
cout << first << endl;
if (first == 'a' || 'A' || 'e' || 'E' || 'i' || 'I' || 'o' || 'O' || 'u' || 'U')
{
    word.append("-way");
}
else
{
    word.append("-ay");
}
return word;
}

【问题讨论】:

  • 应该是if (first == 'a' || first == 'A' || first == 'e' || ...) ...
  • 提示:使用完整的警告,并注意它们。您的编译器应该警告您有关常量条件的信息。 -Wall -Wextra -pedantic

标签: c++ string


【解决方案1】:

正如 cmets 中所述,您的 if 声明是错误的。每个比较都需要单独进行。来自评论。

if (first == 'a' || first == 'A' || first == 'e' || ...)

但是,您应该考虑将所有元音塞入string 并使用find,而不是使用长的if 语句。像下面的代码这样的东西会更容易阅读和理解。

#include <iostream>
#include <string>
std::string ConvertToPigLatin(std::string word)
{
    static const std::string vowels("aAeEiIoOuU");
    char first = word.at(0);
    std::cout << first << std::endl;
    if (vowels.find(first) != std::string::npos)
    {
        word.append("-way");
    }
    else
    {
        word.append("-ay");
    }
    return word;
}


int main()
{
    std::cout << ConvertToPigLatin("pig") << '\n';
    std::cout << ConvertToPigLatin("alone") << '\n';
}

这个输出

p
猪仔
一个
单程

【讨论】:

    【解决方案2】:

    我会解释为什么你的代码不起作用:

    if (first == 'a' || 'A' || 'e' || 'E' || 'i' || 'I' || 'o' || 'O' || 'u' || 'U')
    

    让我们用“猪”这个词来看看那个 iff 语句

    首先程序首先检查 == 'a'... first == 'P' 所以这是错误的。 然后程序检查是否为假|| 'A' 是真的。因为'A'是真的,假的|| 'A' 也是正确的。 短路评估开始,代码不会检查语句的其余部分,if 条件为真,因此附加了 -way。

    要做你想做的事,你需要先比较每个字母。即,

    if (first == 'a' || first == 'A' || ...
    

    别太担心,这是一个非常标准的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多