14 # include <vcl_msvc_warnings.h> 19 #ifndef END_OF_STRING // If END_OF_STRING not defined 20 #define END_OF_STRING (0) 29 *p = (char)std::toupper(*p);
41 *p = (char)std::tolower(*p);
53 for (; *p && !std::isalnum(*p); p++) ;
56 *p = (char)std::toupper(*p);
57 while (*++p && std::isalnum(*p)) ;
102 char* s = str + std::strlen(str) - 1;
103 for (; s >= str; s--) {
118 int length = (int)std::strlen(c);
121 for (
int i = 0, j = length-1;
134 for (
int i=0, j=(
int)std::strlen(s.c_str())-1; i<j; ++i,--j)
136 char c = s[i]; s[i] = s[j]; s[j] = c;
150 i = (char)std::toupper(i);
158 i = (char)std::tolower(i);
168 std::string::iterator si;
169 bool in_word =
false;
170 for ( si = s.begin(); si != s.end(); ++si ) {
171 if ( !in_word && std::isalnum( *si ) ) {
172 *si = (char)std::toupper( *si );
175 else if ( in_word && !std::isalnum( *si ) ) {
186 int l = (int)std::strlen(rem);
188 std::string::size_type loc = sr.find(rem);
189 if (loc == std::string::npos)
200 int l = (int)std::strlen(rem);
201 if (std::strncmp(sr.c_str(), rem, l) == 0)
210 int l = (int)std::strlen(rem);
211 int lsr = int(sr.length());
212 if (std::strncmp(sr.c_str() + lsr - l, rem, l) == 0)
213 sr.erase(lsr - l, l);
219 return std::atoi(s.c_str());
224 return std::atof(s.c_str());
234 std::istringstream ss(s);
238 if (ss.eof())
return d;
242 if (ss.eof())
return d;
247 case 'k': e=1;
break;
248 case 'M': e=2;
break;
249 case 'G': e=3;
break;
250 case 'T': e=4;
break;
253 if (ss.eof())
return d*std::pow(10.0,3.0*e);
257 if (ss.eof())
return d*std::pow(10.0,3.0*e);
258 if (!ss || c!=
'i')
return 0.0;
261 if (!ss.eof())
return 0.0;
263 return d*std::pow(2.0,10.0*e);
266 static bool NotSpace(
char a)
268 return !std::isspace(a);
272 static bool myequals(IT b1, IT e1,
273 const char * b2,
const char * e2)
275 for (;b1 != e1 && b2 != e2; ++b1, ++b2)
276 if (std::toupper(*b1) != *b2)
return false;
283 std::string::const_iterator begin = std::find_if(str.begin(), str.end(), NotSpace);
284 const std::string::const_reverse_iterator rend(begin);
285 std::string::const_iterator end = std::find_if(str.rbegin(), rend, NotSpace).base();
286 const char *syes =
"YES";
287 const char *strue =
"TRUE";
288 const char *s1 =
"1";
289 const char *son =
"ON";
290 return myequals(begin, end, syes, syes+3)
291 || myequals(begin, end, strue, strue+4)
292 || myequals(begin, end, s1, s1+1)
293 || myequals(begin, end, son, son+2);
306 #define REGEXP_INTEGER "\\-?[0123456789]+" 314 while (str.length() > 0 && range_regexp.
find(str)) {
317 std::ptrdiff_t start= range_regexp.
start(0);
318 std::ptrdiff_t endp = range_regexp.
end(0);
326 std::string match1 = range_regexp.
match(1);
327 std::string match2 = range_regexp.
match(2);
328 std::string match3 = range_regexp.
match(3);
333 if (str.size() > 1 && str[0] ==
',' ) str.erase(0, 1);
335 bool matched2 = range_regexp.
match(2).size() > 0;
336 bool matched3 = range_regexp.
match(3).size() > 0;
358 for (
int i = s; i <= e; i += d)
364 for (
int i = s; i >= e; i += d)
389 std::string::size_type i = 0;
390 const std::string::size_type npos = std::string::npos;
395 enum {not_in_var, start_var, in_var, in_bracket_var} state = not_in_var;
396 std::string::size_type var_begin = 0;
398 std::string::size_type bracket_type = npos;
399 const std::string open_brackets(
"{([");
400 const std::string close_brackets(
"})]");
420 else if ((bracket_type = open_brackets.find_first_of(str[i])) != npos)
422 state=in_bracket_var;
428 assert(var_begin+1 < str.size());
429 assert(i > var_begin);
439 const char * value= std::getenv(str.substr(var_begin+1, i-var_begin).c_str());
442 str.replace(var_begin, i+1-var_begin, value);
443 i = var_begin + std::strlen(value);
450 if (str[i] == close_brackets[bracket_type])
452 assert(var_begin+2 < str.size());
453 assert(i > var_begin+1);
462 const char * value= std::getenv(str.substr(var_begin+2, i-var_begin-2).c_str());
465 str.replace(var_begin, i+1-var_begin, value);
466 i = var_begin + std::strlen(value);
485 const std::string& find_str,
486 const std::string& replace_str,
490 for (
int i = 0; i<num_times; i++)
492 int loc = int(full_str.find( find_str,0));
495 full_str.replace( loc, find_str.length(), replace_str );
515 const static std::string special(
"\t\v\b\r\f\a\\");
516 const static std::string special_tr(
"tvbrfa\\");
520 if (!std::iscntrl(it) || it==
'\n')
524 std::string::size_type i=special.find(it);
525 if (i==std::string::npos)
std::string & vul_string_upcase(std::string &s)
Converts all alphabetical characters to uppercase.
Utility functions for C strings and std::strings.
char * vul_string_c_reverse(char *c)
Reverses the order of the characters in string.
double vul_string_atof(std::string const &s)
Reads a double from a string.
Pattern matching with regular expressions.
char * vul_string_c_right_trim(char *str, const char *rem)
Removes any suffix occurrence of rem from str and returns modified string.
bool find(char const *)
true if regexp in char* arg.
int vul_string_atoi(std::string const &s)
Reads an integer from a string.
std::string & vul_string_trim(std::string &sr, const char *rem)
Removes any occurrences of rem from str and returns modified string.
std::ptrdiff_t end() const
Returns the end index of the last item found.
char * vul_string_c_downcase(char *s)
Converts all alphabetical characters to lowercase.
std::string vul_string_escape_ctrl_chars(const std::string &in)
Replace control chars with escaped representations.
bool vul_string_to_bool(const std::string &str)
Convert a string to a boolean.
std::string & vul_string_right_trim(std::string &sr, const char *rem)
Removes any suffix occurrence of rem from str and returns modified string.
std::string & vul_string_downcase(std::string &s)
Converts all alphabetical characters to lowercase.
std::string & vul_string_reverse(std::string &s)
Reverses the order of the characters in string.
bool vul_string_replace(std::string &full_str, const std::string &find_str, const std::string &replace_str, int num_times)
replaces instances "find_str" in "full_str" with "replace_str" a given "num_times".
char * vul_string_c_trim(char *str, const char *rem)
Removes any occurrences of rem from str, and returns the modified string.
double vul_string_atof_withsuffix(std::string const &s)
Reads a double from a string, with k, kb, M, etc suffix.
contains class for pattern matching with regular expressions
std::vector< int > vul_string_to_int_list(std::string str)
Convert a string to a list of ints, using the matlab index format.
std::ptrdiff_t start() const
Returns the start index of the last item found.
bool vul_string_expand_var(std::string &str)
Expand any environment variables in the string.
char * vul_string_c_capitalize(char *s)
Capitalizes all words in a string.
C++ conforming replacement to the ANSI C functions sprintf and printf.
std::string match(int n) const
Return nth submatch as a string.
char * vul_string_c_upcase(char *s)
Converts all alphabetical characters to uppercase.
std::string & vul_string_left_trim(std::string &sr, const char *rem)
Removes any prefix occurrence of rem from str and returns modified string.
std::string & vul_string_capitalize(std::string &s)
Capitalizes all words in string.
creates a formatted ANSI C++ string
char * vul_string_c_left_trim(char *str, const char *rem)
Removes any prefix occurrence of rem from str and returns modified string.