std::string 문자열 조작

C++ 2012. 5. 20. 15:46



#pragma once

//
// std::string 처리 함수들
//
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
using namespace std;

string trim(string& str, const string& drop = " \t\r\n\v") 
string rtrim = str.erase(str.find_last_not_of(drop)+1);  
return rtrim.erase(0,rtrim.find_first_not_of(drop));  
}  

string rtrim(string str, const string& drop = " \t\r\n\v")
{  
return str.erase( str.find_last_not_of(drop)+1 );
}  

string ltrim(string str, const string& drop = " \t\r\n\v")
{  
return str.erase( 0, str.find_first_anot_of(drop) );
}

// src_str : 원본 문자열
// find_str : 찾을 문자열
// replace_str : 바꿀 문자열
string ReplaceAll(const string& src_str, const string& find_str, const string& replace_str)
{
string str = src_str;
for (string::size_type pos=str.find(find_str); pos!= string::npos; pos=str.find(find_str)) {
str.replace(pos, find_str.size(), replace_str);
}
return str;
}

// 위에건 replaceAll("hi%", "%", "%%") 하면 무한 loop 문제 있음
string replaceAll(const string& src_str, const string& find_str, const string& replace_str)
{
string str = src_str;
for (string::size_type pos=str.find(find_str); pos!= string::npos; pos=str.find(find_str, pos)) {
str.replace(pos, find_str.size(), replace_str);
pos += replace_str.size();
}
return str;
}


// 구분 문자열(seperator)로 split하여 vector로 넘겨줌
std::vector<string> split(string& str, string sep)
{
size_t n = str.length();
size_t start, stop;
std::vector<string> result;
start = str.find_first_not_of(sep);

while ((start >= 0) && (start < n)) {
stop = str.find_first_of(sep, start);
if ((stop < 0) || (stop > n)) stop = n;
result.push_back(str.substr(start, stop - start));
start = str.find_first_not_of(sep, stop+1);
}
return result;
}

// 두 문자 같은지 비교
bool compareIgnoreCaseChar(char& ch1, char& ch2)
{
return (toupper(ch1) == toupper(ch2));
}

// 두 문자열 같은지 비교 : 대소문자 비구분
bool compareIgnoreCase(string& str1, string& str2)
{
return ((str1.size() == str2.size()) && 
equal(str1.begin(), str1.end(), str2.begin(), compareIgnoreCaseChar));
}



// BYTE를 문자열로 변환 : 0x00
string toString(BYTE b)
{
stringstream ss;
ss << "0x" << setw(2) << setfill('0') << hex << static_cast<unsigned>(b);
return ss.str();
}
// SYSTEMTIME을 문자열로 변환 : 1999-12-01 22:50:00.123
string toString(SYSTEMTIME& time)
{
stringstream ss;
ss << setfill('0') << setw(4) << time.wYear 
<< "-" << setw(2) << time.wMonth 
<< "-" << setw(2) << time.wDay
<< " " << setw(2) << time.wHour 
<< ":" << setw(2) << time.wMinute
<< ":" << setw(2) << time.wSecond
<< "." << setw(3) << time.wMilliseconds;
return ss.str();
}


소문자로 변환

string mutex_lower_name = mutex_name;

transform(mutex_lower_name.begin(), mutex_lower_name.end(), mutex_lower_name.begin(), tolower);





// std::string 에 있는 특수 문자를 hex string 출력하기 위함

  static std::string to_hex_string(const std::string &str) {
    const char *b = str.c_str();
    std::stringstream ss;
    for (site_t i = 0; i < str.size(); ++i) {
      ss << std::hex << (int) (b + i);
    }
    return ss.str();
  }





'C++' 카테고리의 다른 글

WinINet, WinHTTP, post 전송  (0) 2012.05.20
간단한 유틸(util) 함수들  (0) 2012.05.20
간단한 file 조작  (0) 2012.05.20
윈도우 uuid(guid) 생성  (0) 2012.05.20
url encode  (0) 2012.05.04
컴파일시 해야할 일 표시하기 #pragma message 사용  (0) 2012.04.15
ado 하위 OS 호환 컴파일 - E_NOINTERFACE (0x80004002)  (0) 2012.04.13
MFC, GDI  (0) 2012.04.06