/* * File: strlib.h * -------------- * This file exports several useful string functions that are not included * in the C++ string library. */ /*************************************************************************/ /* Stanford Portable Library */ /* Copyright (c) 2014 by Eric Roberts <eroberts@cs.stanford.edu> */ /* */ /* This program is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*************************************************************************/ #ifndef _strlib_h #define _strlib_h #include <iostream> #include <string>/* * Function: integerToString * Usage: string s = integerToString(n); * ------------------------------------- * Converts an integer into the corresponding string of digits. For * example, calling integerToString(123) returns the string "123". */ std::string integerToString(int n);/* * Function: stringToInteger * Usage: int n = stringToInteger(str); * ------------------------------------ * Converts a string of digits into an integer. If the string is not a * legal integer or contains extraneous characters other than whitespace, * stringToInteger calls error with an appropriate message. */ int stringToInteger(std::string str);/* * Function: realToString * Usage: string s = realToString(d); * ---------------------------------- * Converts a floating-point number into the corresponding string form. * For example, calling realToString(23.45) returns the string "23.45". */ std::string realToString(double d);/* * Function: stringToReal * Usage: double d = stringToReal(str); * ------------------------------------ * Converts a string representing a real number into its corresponding * value. If the string is not a legal floating-point number or contains * extraneous characters other than whitespace, stringToReal calls error * with an appropriate message. */ double stringToReal(std::string str);/* * Function: toUpperCase * Usage: string s = toUpperCase(str); * ----------------------------------- * Returns a new string in which all lowercase characters have been * converted into their uppercase equivalents. */ std::string toUpperCase(std::string str);/* * Function: toLowerCase * Usage: string s = toLowerCase(str); * ----------------------------------- * Returns a new string in which all uppercase characters have been * converted into their lowercase equivalents. */ std::string toLowerCase(std::string str);/* * Function: equalsIgnoreCase * Usage: if (equalsIgnoreCase(s1, s2)) ... * ---------------------------------------- * Returns true if s1 and s2 are equal discounting differences in case. */ bool equalsIgnoreCase(std::string s1, std::string s2);/* * Function: startsWith * Usage: if (startsWith(str, prefix)) ... * --------------------------------------- * Returns true if the string str starts with the specified prefix, which * may be either a string or a character. */ bool startsWith(std::string str, std::string prefix); bool startsWith(std::string str, char prefix);/* * Function: endsWith * Usage: if (endsWith(str, suffix)) ... * ------------------------------------- * Returns true if the string str ends with the specified suffix, which may * be either a string or a character. */ bool endsWith(std::string str, std::string suffix); bool endsWith(std::string str, char suffix);/* * Function: trim * Usage: string trimmed = trim(str); * ---------------------------------- * Returns a new string after removing any whitespace characters from the * beginning and end of the argument. */ std::string trim(std::string str);/* Private section */ /**********************************************************************/ /* Note: Everything below this point in the file is logically part */ /* of the implementation and should not be of interest to clients. */ /**********************************************************************/ /* * Friend function: writeQuotedString * Usage: writeQuotedString(outfile, str, forceQuotes); * ---------------------------------------------------- * Writes the string str to outfile surrounded by double quotes, converting * special characters to escape sequences, as necessary. If the optional * parameter forceQuotes is explicitly set to false, quotes are included in * the output only if necessary. */ void writeQuotedString(std::ostream & os, const std::string & str, bool forceQuotes = true);/* * Friend function: readQuotedString * Usage: readQuotedString(infile, str); * ------------------------------------- * Reads the next string from infile into the reference parameter str. If * the first character (other than whitespace) is either a single or a * double quote, this function reads characters up to the matching quote, * processing standard escape sequences as it goes. If not, readString * reads characters up to any of the characters in the string * STRING_DELIMITERS in the implementation file. */ void readQuotedString(std::istream & is, std::string & str);/* * Friend function: stringNeedsQuoting * Usage: if (stringNeedsQuoting(str)) ... * --------------------------------------- * Checks whether the string needs quoting in order to be read correctly. */ bool stringNeedsQuoting(const std::string & str);/* * Friend function: writeGenericValue * Usage: writeGenericValue(os, value, forceQuotes); * ------------------------------------------------- * Writes a generic value to the output stream. If that value is a string, * this function uses writeQuotedString to write the value. */ template <typename ValueType> void writeGenericValue(std::ostream & os, const ValueType & value, bool forceQuotes) { os << value; } template <> inline void writeGenericValue(std::ostream & os, const std::string & value, bool forceQuotes) { writeQuotedString(os, value, forceQuotes); }/* * Friend function: readGenericValue * Usage: readGenericValue(is, value); * ----------------------------------- * Reads a generic value from the input stream. If that value is a string, * this function uses readQuotedString to read the value. */ template <typename ValueType> void readGenericValue(std::istream & is, ValueType & value) { is >> value; } template <> inline void readGenericValue(std::istream & is, std::string & value) { readQuotedString(is, value); } #endif