안녕하세요. 멀더입니다.
구글 형님이 도와 주시고 여러 개발자들이 모아주신
STL기반의 문자열 다루기 함수 입니다.... BCB, VC 모두 사용가능 합니다.
(다른 좋은 알고리즘이 있으신분들은 더 올려 주세요)
//-------------------------------------------------------------------------------
#include <stdio.h>
#include <vector>
#include <string>
#include <memory>
#include <algorithm>
using namespace std;
class String_Util
{
public:
static string& LowerCase(string& str) {
transform(str.begin(), str.end(), str.begin(), tolower); //
return str;
}
static string& UpperCase(string& str) {
transform(str.begin(), str.end(), str.begin(), toupper); //
return str;
}
static string& LTrim(string& str) {
string::size_type pos = str.find_first_not_of(' ');
if(pos != string::npos) str.erase(0, pos);
else str.erase(str.begin(), str.end());
return str;
}
static string& RTrim(string& str) {
string::size_type pos = str.find_last_not_of(' ');
if(pos != string::npos) str.erase(pos + 1);
else str.erase(str.begin(), str.end());
return str;
}
static string& Trim(string& str) {
string::size_type pos = str.find_last_not_of(' ');
if(pos != string::npos) {
str.erase(pos + 1);
pos = str.find_first_not_of(' ');
if(pos != string::npos) str.erase(0, pos);
}
else str.erase(str.begin(), str.end());
return str;
}
static void StringTokenize(const string& str, vector<string>& tokens, const string& delimiters = " ") {
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
string::size_type pos = str.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos){
tokens.push_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
}
// just debug
static void string_print(string& str) {
puts(str.c_str());
}
static void test() {
string str1 = " hi Mulder , String Demo 입니다. .... ";
string str2 = str1;
string str3 = str1;
string str4 = str1;
string str5 = str1;
string str6 = str1;
printf("source[%s]\nlower[%s]\nupper[%s]\nleft-trim[%s]\nright-trim[%s]\nboth-trim[%s]\n",
str1.c_str(),
String_Util::LowerCase(str1).c_str(),
String_Util::UpperCase(str2).c_str(),
String_Util::LTrim(str3).c_str(),
String_Util::RTrim(str4).c_str(),
String_Util::Trim(str5).c_str()
);
vector<string> tokens;
StringTokenize(str6, tokens, " ");
for_each(tokens.begin(), tokens.end(), string_print);
}
};
//-------------------------------------------------------------------------------
|