#include #include #include #include #include class initialization { private: int amount, highestCount; std::string brailleLine, str[3]; public: std::string readLinesFromText(char *file[]); void setAmountOfLines(char *file[]); int returnAmount() { return amount; } void populateTempCharArr(std::string tempStr1); int returnHighestCount(){ return highestCount; } }; class brailleReading : public initialization { private: std::map numSequence; public: void populateMemoryCharacterMap(); int stringToNumber(std::string tempString); std::string translateBrailleToEnglish(std::string tempPassStr); void initiateTranslation(std::string input); }; void initialization::setAmountOfLines(char *file[]) { std::string line; std::ifstream myFile; int count = 0, iterator = 0; myFile.open(file[1]); if(myFile.is_open()) { while(myFile.good()) { getline(myFile, line); for( ; iterator < 3; iterator++) str[iterator] = line; ++count; } myFile.close(); } else std::cout << "Unable to open file\n"; amount = count - 1; } std::string initialization::readLinesFromText(char *file[]) { std::ifstream brailleFile; int iterator = 0; std::string tempStr, tempStr2; std::ostringstream stringStream; brailleFile.open(file[1]); if(brailleFile.is_open()) { while(brailleFile.good()) { getline(brailleFile, brailleLine, '\0'); stringStream << brailleLine; tempStr += stringStream.str(); } while(iterator < tempStr.length()) { if((tempStr[iterator] == ' ') || (tempStr[iterator] == '.')) tempStr2 += tempStr[iterator]; ++iterator; } brailleFile.close(); } else std::cout << "Unable to open file\n"; return tempStr2; } void brailleReading::populateMemoryCharacterMap() { numSequence[1] = "a"; numSequence[2] = "b"; numSequence[14] = "c"; numSequence[145] = "d"; numSequence[15] = "e"; numSequence[124] = "f"; numSequence[1245] = "g"; numSequence[125] = "h"; numSequence[24] = "i"; numSequence[245] = "j"; numSequence[13] = "k"; numSequence[123] = "l"; numSequence[134] = "m"; numSequence[1345] = "n"; numSequence[135] = "o"; numSequence[1234] = "p"; numSequence[12345] = "q"; numSequence[1235] = "r"; numSequence[234] = "s"; numSequence[2345] = "t"; numSequence[136] = "u"; numSequence[1236] = "v"; numSequence[2456] = "w"; numSequence[1346] = "x"; numSequence[13456] = "y"; numSequence[1356] = "z"; } int brailleReading::stringToNumber(std::string tempString) { int result; std::stringstream convert(tempString); if( !(convert >> result) ) result = 0; return result; } std::string brailleReading::translateBrailleToEnglish(std::string tempPassStr) { int key = 0; populateMemoryCharacterMap(); key = stringToNumber(tempPassStr); for( std::map::iterator intIter = numSequence.begin(); intIter != numSequence.end(); ++intIter ) { if( (*intIter).first == key ) return (*intIter).second; } } void brailleReading::initiateTranslation(std::string input) { //starting positions for first braille character int letter1 = 0, letter2 = input.length() / 3, letter3 = letter2 * 2, letter4 = 1, letter5 = letter2 + 1, letter6 = letter3 + 1; std::string numberSeq = "\0"; while( letter1 <= input.length() / 3 ) { if(input[letter1] == '.') numberSeq = numberSeq + '1'; if(input[letter2] == '.') numberSeq = numberSeq + '2'; if(input[letter3] == '.') numberSeq = numberSeq + '3'; if(input[letter4] == '.') numberSeq = numberSeq + '4'; if(input[letter5] == '.') numberSeq = numberSeq + '5'; if(input[letter6] == '.') numberSeq = numberSeq + '6'; letter1 += 3; letter2 += 3; letter3 += 3; letter4 = letter1 + 1; letter5 = letter2 + 1; letter6 = letter3 + 1; if(numberSeq == "\0") std::cout << ' '; //this will check for spaces and add them else std::cout << translateBrailleToEnglish(numberSeq); numberSeq = "\0"; } } int main(int argc, char *argv[]) { brailleReading rayCharles; rayCharles.setAmountOfLines(argv); rayCharles.initiateTranslation( rayCharles.readLinesFromText(argv) ); std::cout << '\n'; return 0; }