2017-03-04 6 views
0

Im ein Schwein Latein-Wandler machen, ich habe es mit einem Wort zu manipulieren bekommen kann und muß es ganze Sätze konvertieren, jedes Wort in Schweinlatein ausgegeben zu machen, unten ist mein Code:Ärger mit ganzem Satz Manipulation

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

Ratschläge, wie man dies zu ganzen Sätzen macht, wären sehr willkommen!

+0

die # include ist ausschließlich für die text.txt, die, wenn ein Satz in die kalkulatorische wird, wandelt es perfekt – Stewie9589

Antwort

0

Sie müssten Ihre Zeichenfolge in Wörter aufteilen (Aufteilen nach Leerraumbegrenzer). Vielleicht würde helfen, diese, wenn Sie es nach dem getline Anruf statt der " in pig latin - " Zeile ein:

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

dieses geholfen, aber es fügt nur die Wörter in eine vertikale Liste ein, nachdem sie sie zerlegt und neu angeordnet hat, sie gibt sie nicht als eine einzelne Textzeile aus. – Stewie9589

+0

@ Stewie9589 Sie können anpassen, wie die Ausgabe sein soll, wie ersetzen Sie die 'std :: endl;' mit einem '" "für ein Leerzeichen. – alhadhrami

+0

Bitte denken Sie daran, eine akzeptierte Antwort zu wählen @ Stewie9589 – alhadhrami