In: Computer Science
IN C++
Note: While there are many ways to do conversions to pig latin, I will require that you follow the procedures below, all of which will use the following structure:
struct Word { string english; string piglatin; };
Part 1. Write a function that takes in an English sentence as one string. This function should first calculate how many “words” are in the sentence (words being substrings separated by whitespace). It should then allocate a dynamic array of size equal to the number of words. The array contains Word structures (i.e. array of type Word). The function would then store each word of that sentence to the english field of the corresponding structure. The function should then return this array to the calling function using the return statement, along with the array size using a reference parameter.
This function should also remove all capitalization and special characters other than letters. Implement the function with the following prototype
Word * splitSentence(const string words, int &size);
Part 2. Write a function that takes in an array of Word structures and the size of the array and converts each english field to the corresponding piglatin field.
void convertToPigLatin(Word [] wordArr, int size);
To do this conversion, if a word starts with a consonant, the piglatin conversion of the word involves moving the first letter of the word to the end of the string and then adding “ay” to the end.
pig -> igpay
cat -> atcay
dog -> ogday
If the word starts with a vowel, simply add “way” to the end of the word
apple -> appleway
are -> areway
Part 3. Write a function that takes in an array of Word structures and outputs the pig latin part of it to the screen, with each word separated by a space.
void displayPigLatin(const Word [] wordArr, int size);
Example:
Please enter a string to convert to PigLatin: Casino is nothing but a Goodfellas knockoff Output: asinocay isway othingnay utbay away oodfellasgay nockoffkay
Error conditions: Your program should get rid of all punctuation and special characters other than letters. Your program should be able to deal with there being two or more spaces between words.
Note: Make sure to follow proper programming style, as per the style supplement.
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
struct Word {
string english;
string piglatin;
};
string validate(string s) {
string ans;
for (int i = 0; i < s.length(); ++i) {
if (s[i] >= 'a' && s[i] <= 'z') {
ans += s[i];
} else if (s[i] >= 'A' && s[i] <= 'Z') {
ans += tolower(s[i]);
}
}
return ans;
}
Word * splitSentence(const string words, int &size) {
// breaking input into word using string stream
stringstream s(words); // Used for breaking words
string word; // to store individual words
int count = 0;
while (s >> word)
count++;
size = count;
struct Word* array = (struct Word*)malloc(size * sizeof(struct Word));
int i = 0;
stringstream ss(words);
while (ss >> word) {
array[i].english = validate(word);
i++;
}
return array;
}
void convertToPigLatin(Word wordArr[], int size) {
for (int i = 0; i < size; ++i) {
char c = wordArr[i].english[0];
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
string ans = wordArr[i].english + "way";
wordArr[i].piglatin = ans;
} else {
string ans = wordArr[i].english;
ans.erase(ans.begin());
ans += wordArr[i].english[0];
ans += "ay";
wordArr[i].piglatin = ans;
}
}
}
void displayPigLatin(const Word wordArr[], int size) {
for (int i = 0; i < size; ++i) {
cout << wordArr[i].piglatin << " ";
}
cout << endl;
}
int main() {
string input_string;
getline(cin, input_string);
int n;
Word* array = splitSentence(input_string, n);
convertToPigLatin(array, n);
displayPigLatin(array, n);
return 0;
}
OUTPUT: