12#ifndef CCGL_UTILS_STRING_H
13#define CCGL_UTILS_STRING_H
29namespace utils_string {
50bool StringMatch(
const string& text1,
const string& text2);
65string&
Trim(
string& s);
80vector<string>
SplitString(
const string& item,
char delimiter);
89 std::ostringstream oss;
103void UpdateStringMapIfNotExist(
STRING_MAP& opts,
const string& key,
const string& value);
105#if defined(CPP_GCC) || defined(CPP_ICC)
106extern void _itoa_s(vint32_t value,
char* buffer,
size_t size, vint radix);
107extern void _itow_s(vint32_t value,
wchar_t* buffer,
size_t size, vint radix);
108extern void _i64toa_s(vint64_t value,
char* buffer,
size_t size, vint radix);
109extern void _i64tow_s(vint64_t value,
wchar_t* buffer,
size_t size, vint radix);
110extern void _uitoa_s(vuint32_t value,
char* buffer,
size_t size, vint radix);
111extern void _uitow_s(vuint32_t value,
wchar_t* buffer,
size_t size, vint radix);
112extern void _ui64toa_s(vuint64_t value,
char* buffer,
size_t size, vint radix);
113extern void _ui64tow_s(vuint64_t value,
wchar_t* buffer,
size_t size, vint radix);
114extern void _gcvt_s(
char* buffer,
size_t size,
double value, vint numberOfDigits);
122string itoa(vint number);
129wstring
itow(vint number);
136string i64toa(vint64_t number);
143wstring
i64tow(vint64_t number);
150string utoa(vuint number);
157wstring
utow(vuint number);
164string u64toa(vuint64_t number);
171wstring
u64tow(vuint64_t number);
178string ftoa(
double number);
185wstring
ftow(
double number);
192string wtoa(
const wstring& wstr);
194vint _wtoa(
const wchar_t* w,
char* a, vint chars);
201wstring
atow(
const string& astr);
202vint _atow(
const char* a,
wchar_t* w, vint chars);
216vint
IsInt(
const string& num_str,
bool& success);
224vint
IsInt(
const wstring& num_str,
bool& success);
232vint64_t
IsInt64(
const string& num_str,
bool& success);
240vint64_t
IsInt64(
const wstring& num_str,
bool& success);
248vuint
IsUInt(
const string& num_str,
bool& success);
256vuint
IsUInt(
const wstring& num_str,
bool& success);
264vuint64_t
IsUInt64(
const string& num_str,
bool& success);
272vuint64_t
IsUInt64(
const wstring& num_str,
bool& success);
280double IsDouble(
const string& num_str,
bool& success);
288double IsDouble(
const wstring& num_str,
bool& success);
294template <
typename STRING_T>
295bool IsNumber(
const STRING_T& num_str);
300template <
typename STRING_T>
301vint
ToInt(
const STRING_T& num_str);
306template <
typename STRING_T>
307vint64_t
ToInt64(
const STRING_T& num_str);
312template <
typename STRING_T>
313vuint
ToUInt(
const STRING_T& num_str);
318template <
typename STRING_T>
319vuint64_t
ToUInt64(
const STRING_T& num_str);
324template <
typename STRING_T>
325double ToDouble(
const STRING_T& num_str);
328template <
typename STRING_T>
329vint
ToInt(
const STRING_T& num_str) {
330 bool success =
false;
331 return IsInt(num_str, success);
334template <
typename STRING_T>
336 bool success =
false;
337 return IsInt64(num_str, success);
340template <
typename STRING_T>
342 bool success =
false;
343 return IsUInt(num_str, success);
346template <
typename STRING_T>
348 bool success =
false;
352template <
typename STRING_T>
354 bool success =
false;
361 vector<string> value_strs =
SplitString(items, delimiter);
362 if (value_strs.empty()) {
return false; }
365 for (
auto it = value_strs.begin(); it != value_strs.end(); ++it) {
366 if ((*it).find_first_of(
"0123456789") == string::npos) {
369 values.emplace_back(
static_cast<T
>(strtod((*it).c_str(), &end)));
371 vector<T>(values).swap(values);
372 return value_strs.size() == values.size();
375template <
typename STRING_T>
377 bool is_double =
false;
379 if (is_double)
return true;
vint ToInt(const STRING_T &num_str)
Convert an Ansi or Unicode string to an integer.
Definition: utils_string.h:329
wstring i64tow(vint64_t number)
Convert a 64-bits signed integer to an unicode string.
Definition: utils_string.cpp:180
wstring ftow(double number)
Convert a 64-bits floating pointer number to an unicode string.
Definition: utils_string.cpp:220
string ValueToString(const T &val)
Convert value to string.
Definition: utils_string.h:88
vint64_t ToInt64(const STRING_T &num_str)
Convert an Ansi or Unicode string to an signed 64-bits integer.
Definition: utils_string.h:335
wstring itow(vint number)
Convert a signed integer to an unicode string.
Definition: utils_string.cpp:168
void CopyStringMap(const STRING_MAP &in_opts, STRING_MAP &out_opts)
Copy string map.
Definition: utils_string.cpp:78
double ToDouble(const STRING_T &num_str)
Convert an Ansi or Unicode string to a 64-bits floating point number.
Definition: utils_string.h:353
string ftoa(double number)
Convert a 64-bits floating pointer number to a string.
Definition: utils_string.cpp:210
void UpdateStringMap(STRING_MAP &opts, const string &key, const string &value)
Add or modify element in a string map.
Definition: utils_string.cpp:94
string i64toa(vint64_t number)
Convert a 64-bits signed integer to a string.
Definition: utils_string.cpp:174
vuint64_t IsUInt64(const string &num_str, bool &success)
Convert an Ansi string to a 64-bits unsigned integer.
Definition: utils_string.cpp:302
wstring u64tow(vuint64_t number)
Convert a 64-bits unsigned integer to an unicode string.
Definition: utils_string.cpp:204
string itoa(vint number)
Convert a signed integer to a string.
Definition: utils_string.cpp:162
vuint64_t ToUInt64(const STRING_T &num_str)
Convert an Ansi or Unicode string to a 64-bits unsigned integer.
Definition: utils_string.h:347
wstring utow(vuint number)
Convert an unsigned integer to an unicode string.
Definition: utils_string.cpp:192
vint IsInt(const string &num_str, bool &success)
Check if a string is an signed integer, if ture, return the converted integer.
Definition: utils_string.cpp:260
string GetUpper(const string &str)
Get Uppercase of given string.
Definition: utils_string.cpp:16
string u64toa(vuint64_t number)
Convert a 64-bits unsigned integer to a string.
Definition: utils_string.cpp:198
vuint ToUInt(const STRING_T &num_str)
Convert an Ansi or Unicode string to an unsigned integer.
Definition: utils_string.h:341
string & Trim(string &s)
Trim given string's heading and tailing by "<space>,\n,\t,\r".
Definition: utils_string.cpp:70
vector< string > SplitString(const string &item, const char delimiter)
Splits the given string based on the given delimiter.
Definition: utils_string.cpp:35
void TrimSpaces(string &str)
Trim Both leading and trailing spaces.
Definition: utils_string.cpp:22
vint64_t IsInt64(const string &num_str, bool &success)
Convert a string to an signed 64-bits integer.
Definition: utils_string.cpp:274
string wtoa(const wstring &wstr)
Convert an unicode string to an Ansi string.
Definition: utils_string.cpp:232
bool StringMatch(const char *a, const char *b)
Match char ignore cases.
Definition: utils_string.cpp:61
bool SplitStringForValues(const string &items, const char delimiter, vector< T > &values)
Get numeric values by splitting the given string based on the given delimiter.
Definition: utils_string.h:360
bool IsNumber(const STRING_T &num_str)
Check if a string is a number (integer or float)
Definition: utils_string.h:376
vuint IsUInt(const string &num_str, bool &success)
Convert an Ansi string to an unsigned integer.
Definition: utils_string.cpp:288
wstring atow(const string &astr)
Convert an Ansi string to an unicode string.
Definition: utils_string.cpp:250
string utoa(vuint number)
Convert an unsigned integer to a string.
Definition: utils_string.cpp:186
double IsDouble(const string &num_str, bool &success)
Convert an Ansi string to 64-bits floating point number.
Definition: utils_string.cpp:316
Common Cross-platform Geographic Library (CCGL)
Definition: basic.cpp:17
std::map< string, string > STRING_MAP
Map of string key and string value.
Definition: basic.h:349