所以我应该使用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;
}
答案 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' || ...
不要太担心,这是一个非常标准的错误。