简体   繁体   中英

Pig Latin - strings

So I am supposed to convert English words to Pig Latin using stringConvertToPigLatin(string word) function. All the answers I could find on the internet were using char[], and I am not allowed to do so. The program is supposed to begin with adding -way if the first letter is a vowel, and adding -ay if it's a consonant. The problem is that it is always adding "-way", even if my "word" has no vowel at all. What am I doing wrong? This is my function:

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

As noted in the comments your if statement is wrong. Each comparison needs to be done individually. From the comment.

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

However, rather than using a long if statement you should consider stuffing all of the vowels into a string and using find . Something like the code below will be easier to read and follow.

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

This outputs

p
pig-ay
a
alone-way

I'll explain why your code isn't working:

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

Let's walk through that iff statement using the word "Pig"

First the program checks first == 'a'... first == 'P' so that is false. Then the program checks to see if false || 'A' is true. Since 'A' is true, false || 'A' is also true. Short circuit evaluation kicks in, and the code doesn't bother checking the rest of the statement, the if condition is true so -way is appended.

To do what you want, you need to compare first to each letter. IE,

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

Don't worry too much, this is a pretty standard mistake.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM