2017-03-04 89 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