#include <iostream>
#include <sstream>
#include <cctype>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Word
{
string english; // English sentence
string piglatin; // Pig latin sentence
};
// PT 1. Function prototype
Word* splitSentence(const string words, int &size);
int main()
{
string userSentence;
int size;
// Get the users sentence to convert to pig latin
cout << "Please enter a string to convert to pig latin:\n";
getline(cin, userSentence);
// Directs to Word * splitSentence function
Word* tempptr = splitSentence(userSentence, size);
for(int i = 0; i < size; ++i) {
cout << tempptr[i].english << endl;
}
delete [] tempptr;
return 0;
}
//PT 1. Analyze the sentence
Word* splitSentence(const string words, int &size)
{
istringstream iss(words);
vector<string> vec;
string s;
while (iss >> s)
{
remove_if(s.begin(), s.end(),
[](unsigned char ch){ return !isalpha(ch); });
if (!s.empty())
{
transform(s.begin(), s.end(), s.begin(),
[](unsigned char ch){ return tolower(ch); });
vec.push_back(s);
}
}
Word *sentence = new Word[vec.size()];
transform(vec.begin(), vec.end(), sentence,
[](const string &s){
Word w;
w.english = s;
return w;
}
);
size = vec.size();
return sentence;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsgCgpzdHJ1Y3QgV29yZCAKewogICAgc3RyaW5nIGVuZ2xpc2g7ICAgICAvLyBFbmdsaXNoIHNlbnRlbmNlIAogICAgc3RyaW5nIHBpZ2xhdGluOyAgICAvLyBQaWcgbGF0aW4gc2VudGVuY2UgCn07CgovLyBQVCAxLiBGdW5jdGlvbiBwcm90b3R5cGUgCldvcmQqIHNwbGl0U2VudGVuY2UoY29uc3Qgc3RyaW5nIHdvcmRzLCBpbnQgJnNpemUpOwoKaW50IG1haW4oKQp7CiAgICBzdHJpbmcgdXNlclNlbnRlbmNlOwogICAgaW50IHNpemU7IAogICAgCiAgICAvLyBHZXQgdGhlIHVzZXJzIHNlbnRlbmNlIHRvIGNvbnZlcnQgdG8gcGlnIGxhdGluIAogICAgY291dCA8PCAiUGxlYXNlIGVudGVyIGEgc3RyaW5nIHRvIGNvbnZlcnQgdG8gcGlnIGxhdGluOlxuIjsKICAgIGdldGxpbmUoY2luLCB1c2VyU2VudGVuY2UpOwoKICAgIC8vIERpcmVjdHMgdG8gV29yZCAqIHNwbGl0U2VudGVuY2UgZnVuY3Rpb24gCiAgICBXb3JkKiB0ZW1wcHRyID0gc3BsaXRTZW50ZW5jZSh1c2VyU2VudGVuY2UsIHNpemUpOwoKCWZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKCQljb3V0IDw8IHRlbXBwdHJbaV0uZW5nbGlzaCA8PCBlbmRsOwkJCgl9CgogICAgZGVsZXRlIFtdIHRlbXBwdHI7CgoKICAgIHJldHVybiAwOyAgIAp9CgovL1BUIDEuIEFuYWx5emUgdGhlIHNlbnRlbmNlIApXb3JkKiBzcGxpdFNlbnRlbmNlKGNvbnN0IHN0cmluZyB3b3JkcywgaW50ICZzaXplKQp7Cglpc3RyaW5nc3RyZWFtIGlzcyh3b3Jkcyk7Cgl2ZWN0b3I8c3RyaW5nPiB2ZWM7CglzdHJpbmcgczsKCiAgICB3aGlsZSAoaXNzID4+IHMpCiAgICB7CgkJcmVtb3ZlX2lmKHMuYmVnaW4oKSwgcy5lbmQoKSwKCQkJW10odW5zaWduZWQgY2hhciBjaCl7IHJldHVybiAhaXNhbHBoYShjaCk7IH0pOwoJCQkKICAgICAgICBpZiAoIXMuZW1wdHkoKSkKICAgICAgICB7CgkJCXRyYW5zZm9ybShzLmJlZ2luKCksIHMuZW5kKCksIHMuYmVnaW4oKSwKCQkJCVtdKHVuc2lnbmVkIGNoYXIgY2gpeyByZXR1cm4gdG9sb3dlcihjaCk7IH0pOwoKICAgICAgICAJdmVjLnB1c2hfYmFjayhzKTsKICAgICAgICB9CiAgICB9CgogICAgV29yZCAqc2VudGVuY2UgPSBuZXcgV29yZFt2ZWMuc2l6ZSgpXTsKCiAgICB0cmFuc2Zvcm0odmVjLmJlZ2luKCksIHZlYy5lbmQoKSwgc2VudGVuY2UsCiAgICAJW10oY29uc3Qgc3RyaW5nICZzKXsKICAgIAkJV29yZCB3OwogICAgCQl3LmVuZ2xpc2ggPSBzOwogICAgCQlyZXR1cm4gdzsKCQl9CgkpOwoKICAgIHNpemUgPSB2ZWMuc2l6ZSgpOwogICAgcmV0dXJuIHNlbnRlbmNlOwp9