2017-03-04 90 views
0

林作出的Pig Latin轉換器,我可以得到它來操縱一個字,需要它整個句子轉換,使得豬拉丁輸出的每一個字,下面是我的代碼:麻煩與整個句子操縱

#include <iostream> 
#include <string> 
#include <cstring> 
#include <fstream> 

using namespace std; 

bool isVowel (char); 
string rotate(string); 
string plString(string); 

int main() 
{ 
string str; 
cout <<"Enter a sentence: "; 
getline (cin, str); 
cout << endl; 
cout << str <<" in pig latin - " << plString(str) << endl; 

ifstream infile; 
infile.open("input.txt"); 
infile >> str; 
while(infile) 
{ 
    cout << plString(str) << " "; 
    infile >> str; 
} 

cout << endl; 
} 
bool isVowel (char ch) 
{ 
switch (ch) 
{ 
case 'A': 
case 'E': 
case 'I': 
case 'O': 
case 'U': 
case 'Y': 
case 'a': 
case 'e': 
case 'i': 
case 'o': 
case 'u': 
case 'y': 
    return true; 
default: 
     return false; 
} 
} 
string rotate(string str) 
{ 
string::size_type len = str.length(); 
string str1; 
str1 = str.substr(1, len - 1) + str[0]; 
return str1; 
} 
string plString(string str) 
{ 
string::size_type len; 
bool vowel; 
string::size_type counter; 
if (isVowel (str[0])) 
    str = str + "way"; 
else 
{ 
    str = str + ""; 
    str = rotate(str); 
    len = str.length(); 
    vowel = false; 
    for (counter = 1; counter < len - 1; counter++) 
     if (isVowel (str[0])) 
     { 
      vowel = true; 
      break; 
     } 
     else 
      str = rotate(str); 
    if(!vowel) 
     str = str.substr(1,len) + "way"; 
    else 
     str = str + "ay"; 
} 
return str; 
} 

任何意見,如何得到這個做完整的句子將不勝感激!

+0

中的#include 是純粹爲的text.txt,這在一個句子估算成,其轉換完全 – Stewie9589

回答

0

您需要將您的字符串拆分爲單詞(按空格分隔符分隔)。也許如果您的通話getline代替" in pig latin - "行後插入,這將有助於:

char delimiter = ' '; 
string::size_type i = 0; 
string::size_type j = str.find(delimiter); 

while (j != string::npos) { 
    string word = str.substr(i, j-i); 
    std::cout << plString(word) << std::endl; 
    i = ++j; 
    j = str.find(delimiter, j); 

    if (j == string::npos) { 
     word = str.substr(i, s.length()); 
     std::cout << plString(word) << std::endl; 
    } 
} 
+0

這但它只是在將它們分解並重新排列後放入垂直列表中,而不是將它們輸出爲單行文本。 – Stewie9589

+0

@ Stewie9589您可以自定義輸出的方式,比如用''「'替換'std :: endl;'作爲空格。 – alhadhrami

+0

請考慮選擇一個被接受的答案@ Stewie9589 – alhadhrami