2014-11-29 3 views
0

Поэтому я должен преобразовать английские слова в Pig Latin, используя функцию stringConvertToPigLatin (string word). Все ответы, которые я мог найти в Интернете, использовали char [], и мне не разрешено это делать. Предполагается, что программа должна начинаться с добавления -way, если первая буква является гласной, и добавление -ay, если это согласный. Проблема в том, что он всегда добавляет «-way», даже если мое «слово» вообще не имеет гласного. Что я делаю не так? Это моя функция:Pig Latin - strings

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

Это должно быть 'if (first == 'a' || first == 'A' || first == 'e' || ...)' ... – quantdev

+2

Совет: используйте полные предупреждения и прислушай их. Ваш компилятор должен был предупредить вас о постоянном условии. '-Wall -Wextra -pedantic' – Deduplicator

ответ

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

Это выводит

р
свино-ау

одна-полосная

0

Я объясню, почему код не работает:

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

Давайте рассмотрим это утверждение iff, используя слово «Свиньи»

Сначала программа сначала проверяет == 'a' ... first == 'P', так что это ложь. Затем программа проверяет, есть ли false || «А» - это правда. Поскольку «A» истинно, false || «А» также верно. Оценка короткого замыкания происходит, и код не мешает проверке остальной части инструкции, условие if истинно, так что добавляется.

Чтобы сделать то, что вы хотите, вам нужно сначала сравнить с каждой буквой. I.E.,

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

Не беспокойтесь слишком много, это довольно стандартная ошибка.