Problem: At college X, students and professors often use abbreviations for long titles of academic papers and projects. In this problem, you are asked to verify whether a given abbreviation matches the first letters of the words in a string, ignoring case. The abbreviation is valid only if it follows the exact order of the first letters of each word.

Examples:

For the words:
United Nations
united nations
United nations
united Nations

Valid abbreviations are:
UN, un, Un, uN

For the words:
Machine Learning college X

Valid abbreviations are:
MLIB (or any combination of upper and lowercase letters in the same order, such as mLiB).

Your Task

Main Program:

Write a C++ program that accepts four characters from the user and stores them in four character variables. Pass these characters to a function named isValidAbbreviation, which returns true if the abbreviation is valid, otherwise returns false. In the main function, print "yes" or "no" (lowercase letters) based on the returned value.

isValidAbbreviation Function:

1. Accept the words character by character as input.
2. Check whether the first letter of each word matches the corresponding abbreviation character (case insensitive).
3. Return false if there is any mismatch.
4. Return true if the entire abbreviation is correct.

To read character sequences with spaces:
First write:
cin >> noskipws;

Then a loop like the following may be used:
for (cin >> c; c != '\n'; cin >> c)

Output Format:

Print:
yes
or
no

accordingly.

Note:

- Do not print any extra messages such as:
  cout << "Enter a number";
  cout << "The computed answer is";
- Use cout only to print the final output.
- Do not print unnecessary spaces.
- Do not hard-code the solution.
- If any test case passes by simply printing with cout and without logic, marks will not be awarded.

Student submission:
#include <simplecpp>

char makeItLowerCase(char c){
    c = (c < 97)? (char)(c+=32):c;
}

bool isValidAbbreviation(char c1, char c2, char c3, char c4){
    c1 = makeItLowerCase(c1);
    c2 = makeItLowerCase(c2);
    c3 = makeItLowerCase(c3);
    c4 = makeItLowerCase(c4);
    int spaces = 0;
    char charTemp;

    // get first letter
    if(cin >> charTemp){
        charTemp = makeItLowerCase(charTemp);
        if(charTemp != c1){
            
            return 0;
        }
    }else{
        return 0;
    }

    //skip over word
    while(cin >> noskipws >> charTemp){
        if(charTemp == ' '){
            spaces += 1;
            break;
        }
    }

    // get second letter

    if(cin >> charTemp){
        charTemp = makeItLowerCase(charTemp);
        if(charTemp != c2){
            
            return 0;
        }
    }else{
        return 0;
    }

    // skip over word
    while(cin >> noskipws >> charTemp){
        if(charTemp == ' '){
            spaces += 1;
            break;
        }
    }

    //get third letter
    if(cin >> charTemp){
        charTemp = makeItLowerCase(charTemp);
        if(charTemp != c3){
            return 0;
        }
    }else{
        return 0;
    }

    // skiip over word
    while(cin >> noskipws >> charTemp){
        if(charTemp == ' '){
            spaces += 1;
            break;
        }
    }

    // get fourth letter
    if(cin >> charTemp){
        charTemp = makeItLowerCase(charTemp);
        if(charTemp != c4){
            return 0;
        }
    }else{
        return 0;
    }

    // skip over word
    while(cin >> noskipws >> charTemp){
        if(charTemp == ' '){
            if(cin >> charTemp){
                return 0;
            }else{
                return 1;
            }
        }
    }
    return 1;
}

int main(){
    char c1;
    char c2;
    char c3;
    char c4;
    cin >> c1 >> c2 >> c3 >> c4;
    
    if(isValidAbbreviation(c1,c2,c3,c4)){
        cout << "yes";
    }else{
        cout << "no";
    }

    
}

Grading criterion: Accepting words character by character
Rating A: Correctly implemented a loop which accepts the sequence as input, character by character till a '\n' is encountered

Rating B: some issue
Rating C: major issue
Rating D: 0
Assigned grade: A