2014-11-29 3 views
0

그래서 저는 stringConvertToPigLatin (문자열 단어) 기능을 사용하여 영어 단어를 돼지 라틴어로 변환해야합니다. 인터넷에서 찾을 수있는 모든 대답은 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; 
} 
+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') 

"pig"라는 단어를 사용하여 iff 명령문을 살펴 보겠습니다.

먼저 프로그램은 먼저 == 'a'... first == 'P'를 검사하여 false가되도록합니다. 그런 다음 프로그램은 false || 'A'는 사실입니다. 'A'가 참이므로 false || 'A'도 마찬가지입니다. 단락 회로 평가가 시작되고 코드가 나머지 문을 검사하는 것을 신경 쓰지 않고 if 조건이 true로되어 있으므로 추가됩니다.

원하는대로하려면 먼저 각 문자를 비교해야합니다. I.E.,

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

너무 많이 걱정하지 마십시오. 이것은 꽤 일반적인 실수입니다.

관련 문제