猪拉丁语 - 字符串

时间:2014-11-29 03:03:49

标签: c++ string

所以我应该使用stringConvertToPigLatin(字符串字)函数将英语单词转换为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;
}

2 个答案:

答案 0 :(得分:1)

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

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

但是,您应该考虑将所有元音填充到if并使用string,而不是使用长find语句。类似下面的代码将更容易阅读和遵循。

#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';
}

此输出

  


  猪,唉
  一个
  单独的方式

答案 1 :(得分:0)

我会解释为什么你的代码无效:

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

让我们使用单词“Pig”

来查看iff语句

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

要做你想做的事,你需要首先比较每个字母。 I.E.,

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

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