Respuesta :
Answer:
Here is the c++ program:
#include <iostream> //to use input output functions
using namespace std; //to identify objects cin cout
int main() { //start of main function
string caption; //stores the caption
int last_index; //stores the index position of the last character of caption
char last_character; //stores the last character of the caption
cout<<"Please type a caption: "; //prompts user to enter a caption
getline(cin, caption); //reads the complete line of caption from user
last_index = caption.size() - 1; //sets the last_index to the last character of caption
last_character = caption.at(last_index); //sets the last_character to the last character positioned by last_index
if ((last_character == '!') || (last_character == '?')) {} /* checks if the last character of the caption is either ! or ? and if this statement evaluate to true then this does not require any action */
else if (last_character == ',') { //checks if the last character of the caption is a comma
caption.at(last_index) = '.'; } //if the else if condition is true then replace that comma with a period .
else if (last_character != '.') { //checks if the caption does not end with ! ? , .
caption.push_back('.');} //append period to the caption . if above if else condition is true
else if ((last_index > 0) && (last_character == '.') && (caption.at(last_index - 1) == '.')) { //checks if the caption has two periods .
if ((last_index > 1) && (caption.at(last_index - 2) == '.')) {} //checks if the caption has three periods and does nothing if this is true
else { //if caption has two periods
caption.pop_back();}} //removes one period if caption has two periods .
cout << caption << endl;} //displays the caption
Explanation:
I will explain the above program with an example
Lets say user input the caption: I like pie
So
caption = " I like pie"
The first if condition if ((last_character == '!') || (last_character == '?')) evaluate to false because the last character of the caption is not an exclamation mark of a question mark. So the program moves to the next else if statement:
else if (last_character == ',') This statement is also false because the last character of the caption is not a comma. So the program moves to the next else if part.
else if (last_character != '.')
Now this statement evaluate to true because the last character of the caption is not a period . sign. So this part is executed. It has a statement:
caption.push_back('.');
Now this statement uses push_back() method which adds new character i.e. period '.' at the end of the caption string, increasing its length by one.
So the output of the program is:
I like pie.
If the caption = " I like pie!" then this if ((last_character == '!') || (last_character == '?')) condition executes and since it does nothing {} so the caption remains as it is and the output is:
I like pie!
If the caption = "Coming soon…" then this else if ((last_index > 0) && (last_character == '.') && (caption.at(last_index - 1) == '.')) condition executes which checks if the caption has two period. When this condition evaluates to true then the statement inside this else if condition executes which is: if ((last_index > 1) && (caption.at(last_index - 2) == '.')) and this checks if the caption has three periods. Yes the caption has three periods so it does nothing and the caption remains as it is and the output is:
Coming soon…
However if the caption is Coming soon.. with two periods then the else part inside else if ((last_index > 0) && (last_character == '.') && (caption.at(last_index - 1) == '.')) condition executes which is: caption.pop_back(); and this removes one period from the caption and the output is:
Coming soon.
The screenshot of the program and its output is attached.
