2016-11-15 73 views
-1

我没有收到错误,但输出不正确。我不确定我做错了什么。我只能使用字符串库中的函数。猪拉丁程序

#include <iostream> 
#include <string> 
#include <cstdlib> 


using namespace std; 



int main() { 


    string message, pig_message; 
    getline(cin, message); 

    unsigned int x = message.find_first_of("aeiou"); 
    if (message[x] == 'a' || 'e' || 'i' || 'o' || 'u') { 
     pig_message = message + "yay"; 
     cout << pig_message; 

    } 
    else if (!(message[x] == 'a' || 'e' || 'i' || 'o' || 'u')) { 
     pig_message = message.substr(1) + message[0] + "ay"; 
     cout << pig_message; 
    } 



    system("pause"); 
    return 0; 
} 
+0

http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Biffen

+3

'message [x] =='a'|| 'e'|| '我'|| 'o'|| '你'不*表示你认为它的意思。 – Biffen

+1

它应该是'if(message [x] =='a'|| message [x] =='e'|| ...){'。 – songyuanyao

回答

0

您的比较声明不正确。 确保你的函数实际上遍历了这些字母,并且你正确地连接了字符串。

因此: unsigned int x = message.find_first_of(“aeiou”); //返回第一个匹配项 if(message [x] =='a'|| message [x] =='e'...)//当前您的代码读取为只检查一个。

把它看成是IF消息[X] = A,如果E,如果我 VS 如果消息[X] = A,IF消息[X] =我

什么是你的代码做后,找到一个匹配? pig_message = message +'yay'会将“yay”添加到整个消息字符串中。 然后它会打印出来并继续前进,而不对其他元音进行任何操作。

我是C++的新手,但我就是这样理解你的代码。

在if循环中用if语句在循环中添加字符串,一次可以遍历整个输入字符串一个字母可能会更好。

+0

详细解答您的答案。 – Mistalis

0

第一个if语句总是如此。你应该将其更改为

if (message[x] == 'a' || message[x] == 'e' || message[x] == 'i' || message[x] == 'o' || message[x] == 'u') { 

另外,你可以改变else if (...) {线只是

else { 

,如果你想,如果说法不属实它被执行的每个第一次。