STL 中的 std::string大小寫轉(zhuǎn)換 lowercase芹血、uppercase、Trim、replace幔烛、split
#define ADD_VECTOR_END(v,i) (v).push_back((i))
string lowerCase(string value) {
return changeCase(value, true);
}
string upperCase(string value) {
return changeCase(value, false);
}
void lTrim(string &value) {
string::size_type i = 0;
for (i = 0; i < value.length(); i++) {
if (value[i] != ' ' &&
value[i] != '\t' &&
value[i] != '\n' &&
value[i] != '\r')
break;
}
value = value.substr(i);
}
void rTrim(string &value) {
int32_t i = 0;
for (i = (int32_t) value.length() - 1; i >= 0; i--) {
if (value[i] != ' ' &&
value[i] != '\t' &&
value[i] != '\n' &&
value[i] != '\r')
break;
}
value = value.substr(0, i + 1);
}
void trim(string &value) {
lTrim(value);
rTrim(value);
}
string changeCase(string &value, bool lowerCase) {
int32_t len = value.length();
string newvalue(value);
for (string::size_type i = 0, l = newvalue.length(); i < l; ++i)
newvalue[i] = lowerCase ? tolower(newvalue[i]) : toupper(newvalue[i]);
return newvalue;
}
void replace(string &target, string search, string replacement) {
if (search == replacement)
return;
if (search == "")
return;
string::size_type i = string::npos;
string::size_type lastPos = 0;
while ((i = target.find(search, lastPos)) != string::npos) {
target.replace(i, search.length(), replacement);
lastPos = i + replacement.length();
}
}
void split(string str, string separator, vector<string> &result) {
result.clear();
string::size_type position = str.find(separator);
string::size_type lastPosition = 0;
uint32_t separatorLength = separator.length();
while (position != str.npos) {
ADD_VECTOR_END(result, str.substr(lastPosition, position - lastPosition));
lastPosition = position + separatorLength;
position = str.find(separator, lastPosition);
}
ADD_VECTOR_END(result, str.substr(lastPosition, string::npos));
}