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>

bool isValidAbbreviation(char a, char b, char c, char d){
    char inp;
    int mem = 1, iter = 1;
    bool valid = false;
    cin >> noskipws;
    
    for(cin >> inp; inp != '\n'; cin >> inp){
        if(inp == ' '){
            mem = 1;
            iter += 1;
            if(iter > 4){
                valid = false; 
                break;
            }
            continue;
        }else if(mem == 0){
            continue;
        }else if(mem == 1){
            mem = 0;
            if(iter == 1){
                valid = ((a == (inp - 'a' + 'A')) || (a == (inp - 'A' + 'a')));
                if(!valid) break;
            }else if(iter == 2){
                valid = ((b == (inp - 'a' + 'A')) || (b == (inp - 'A' + 'a')));
                if(!valid) break;
            }else if(iter == 3){
                valid = ((c == (inp - 'a' + 'A')) || (c == (inp - 'A' + 'a')));
                if(!valid) break;
            }else if(iter == 4){
                valid = ((d == (inp - 'a' + 'A')) || (d == (inp - 'A' + 'a')));
                if(!valid) break;
            }
        }
    }
    if(iter < 4){
        valid = false;
    }
    return valid;
}

main_program{
    char a, b, c, d;
    cin >> a >> b >> c >> d;
    bool out;

    out = isValidAbbreviation(a, b, c, d);
    if(out){
        cout << "yes";
    }else{
        cout << "no";
    }
}

Grading criterion: function: returning value
Rating A: Correctly returns True or False. Should return false if more than four words in the sentence.

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