93 lines
1.5 KiB
C++
93 lines
1.5 KiB
C++
#include "StdAfx.h"
|
|
#include "stl.h"
|
|
|
|
static std::list<std::string> s_stList;
|
|
|
|
char korean_tolower(const char c)
|
|
{
|
|
char ret = c;
|
|
if (c >= 'A' && c <= 'Z')
|
|
ret = c - 'A' + 'a';
|
|
|
|
assert(ret == tolower(c));
|
|
return ret;
|
|
}
|
|
|
|
std::string& stl_static_string(const char * c_sz)
|
|
{
|
|
std::string str;
|
|
str.assign(c_sz);
|
|
|
|
s_stList.push_back(str);
|
|
return s_stList.back();
|
|
}
|
|
|
|
void stl_lowers(std::string& rstRet)
|
|
{
|
|
for (size_t i = 0; i < rstRet.length(); ++i)
|
|
rstRet[i] = korean_tolower(rstRet[i]);
|
|
}
|
|
|
|
int split_string(const std::string& input, const std::string& delimiter, std::vector<std::string>& results, bool includeEmpties)
|
|
{
|
|
int iPos = 0;
|
|
int newPos = -1;
|
|
UINT sizeS2 = delimiter.size();
|
|
UINT isize = input.size();
|
|
|
|
if ((isize == 0) || (sizeS2 == 0))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
std::vector<int> positions;
|
|
|
|
newPos = input.find(delimiter, 0);
|
|
|
|
if (newPos < 0)
|
|
return 0;
|
|
|
|
int numFound = 0;
|
|
|
|
while (newPos >= iPos)
|
|
{
|
|
numFound++;
|
|
positions.push_back(newPos);
|
|
iPos = newPos;
|
|
newPos = input.find(delimiter, iPos+sizeS2);
|
|
}
|
|
|
|
if (numFound == 0)
|
|
return 0;
|
|
|
|
for (UINT i = 0; i <= positions.size(); ++i)
|
|
{
|
|
std::string s("");
|
|
if (i == 0)
|
|
{
|
|
s = input.substr(i, positions[i]);
|
|
}
|
|
else
|
|
{
|
|
UINT offset = positions[i-1] + sizeS2;
|
|
|
|
if (offset < isize)
|
|
{
|
|
if (i == positions.size())
|
|
{
|
|
s = input.substr(offset);
|
|
}
|
|
else if (i > 0)
|
|
{
|
|
s = input.substr(positions[i-1] + sizeS2, positions[i] - positions[i-1] - sizeS2);
|
|
}
|
|
}
|
|
}
|
|
if (includeEmpties || (s.size() > 0))
|
|
{
|
|
results.push_back(s);
|
|
}
|
|
}
|
|
return numFound;
|
|
}
|