/////////////////////////////////////////////////////////////////////// // Utilities.cpp - small, generally usefule, helper classes // // ver 1.4 // // Language: C++, Visual Studio 2015 // // Platform: Dell XPS 8900, Windows 10 // // Application: Most Projects, CSE687 - Object Oriented Design // // Author: Jim Fawcett, Syracuse University, CST 4-187 // // jfawcett@twcny.rr.com // /////////////////////////////////////////////////////////////////////// //#include #include #include #include #include #include "Utilities.h" using namespace Utilities; /* * Note: * The std::string src argument must be pass by value so that we can pass * std::ostringstream.out() to the first argument and std::ostringstream out * to the last argument, e.g., the same std::ostringstream object for both * arguments. Otherwise we attempt to insert out's string into itself. */ void StringHelper::Title(std::string src, std::ostream& out) { out << "\n " << src; out << "\n " << std::string(src.size() + 2, '='); } void StringHelper::Title(std::string src, std::ostringstream& out) { out.str(""); out << "\n " << src; out << "\n " << std::string(src.size() + 2, '='); } void StringHelper::title(std::string src, std::ostream& out) { out << "\n " << src; out << "\n " << std::string(src.size() + 2, '-'); } void StringHelper::title(std::string src, std::ostringstream& out) { out.str(""); out << "\n " << src; out << "\n " << std::string(src.size() + 2, '-'); } void StringHelper::sTitle(std::string src, size_t offset, size_t width, std::ostream& out, char underline) { if (width < src.size()) width = src.size(); size_t lwidth = (width - src.size()) / 2; out << "\n " << std::setw(offset) << "" << std::setw(lwidth) << " " << src; out << "\n " << std::setw(offset) << "" << std::string(width + 2, underline); } void StringHelper::sTitle(std::string src, size_t offset, size_t width, std::ostringstream& out, char underline) { out.str(""); if (width < src.size()) width = src.size(); size_t lwidth = (width - src.size()) / 2; out << "\n " << std::setw(offset) << "" << std::setw(lwidth) << " " << src; out << "\n " << std::setw(offset) << "" << std::string(width + 2, underline); } std::vector StringHelper::split(const std::string& src) { std::vector accum; std::string temp; std::locale loc; size_t index = 0; do { while ((isspace(src[index], loc) || src[index] == ',') && src[index] != '\n') { ++index; if (temp.size() > 0) { accum.push_back(temp); temp.clear(); } } if(src[index] != '\0') temp += src[index]; } while (index++ < src.size()); if(temp.size() > 0) accum.push_back(temp); return accum; } void Utilities::putline() { std::cout << "\n"; } #ifdef TEST_UTILITIES using Utils = Utilities::StringHelper; int main() { Utils::Title("Testing Utilities Package"); putline(); Utils::title("test StringHelper::split(std::string)"); std::string test = "a, \n, bc, de, efg, i, j k lm nopq rst"; std::cout << "\n test string = " << test; std::vector result = StringHelper::split(test); std::cout << "\n"; for (auto item : result) { if (item == "\n") std::cout << "\n " << "newline"; else std::cout << "\n " << item; } std::cout << "\n"; Utils::title("test std::string Converter::toString(T)"); std::string conv1 = Converter::toString(3.1415927); std::string conv2 = Converter::toString(73); std::string conv3 = Converter::toString("a_test_string plus more"); std::cout << "\n Converting from values to strings: "; std::cout << conv1 << ", " << conv2 << ", " << conv3; putline(); Utils::title("test T Converter::toValue(std::string)"); std::cout << "\n Converting from strings to values: "; std::cout << Converter::toValue(conv1) << ", "; std::cout << Converter::toValue(conv2) << ", "; std::cout << Converter::toValue(conv3); std::cout << "\n\n"; return 0; } #endif