CYYS Sample SolutionΒΆ

#include <iostream>
#include "error.h"

using namespace std;

bool is_digit(char c) {
        return '0' <= c && c <= '9';
}

bool legal_C(char c) { return c == '0' || c == '1'; }
bool legal_YY(char a, char b) { return is_digit(a) && is_digit(b); }
bool legal_S(char c) { return c == '1' || c == '4' || c == '7'; }

bool is_cyys(const string& s) {
        return s.size() == 4
             && legal_C(s[0])
             && legal_YY(s[1], s[2])
             && legal_S(s[3]);
}

string get_semester(const string& cyys) {
        if (!is_cyys(cyys)) error("invalid semester code");
        char sem = cyys[3];
        if (sem == '1') return "Spring";
        if (sem == '4') return "Summer";
        if (sem == '7') return "Fall";
        error("invalid semester code");
        return "";  // should never get here
}

string get_year(const string& cyys) {
        if (!is_cyys(cyys)) error("invalid semester code");
        string yy = cyys.substr(1, 2);
        if (cyys[0] == '0') {
                return "19" + yy;
        } else {
                return "20" + yy;
        }
}

string english_cyys(const string& cyys) {
        if (!is_cyys(cyys)) error("invalid semester code");
        return get_semester(cyys) + " " + get_year(cyys);
}