stl에서 제공하는 string 클래스에는 다소 빠진 기능이 존재합니다. 가령, 문자열의 시작과 끝의 공백문자를 제공하는 Trim 류 함수나 문자열을 대문자 나 소문자로 변경해주는 함수들이 그것입니다.
기존의 자바의 String이나 MFC의 CString을 사용해본 사용자들은 이런기능이 없는것에 대해 아쉬움을 느끼게 되는데요. 다음은 이러한 부족한 기능들을 직접 구현한 논것 입니다.
#include#include #include #include using namespace std; // 문자열의 오른쪽과 왼쪽 공백문자 제거 std::string Trim(const std::string& s) { if (s.length() == 0) return s; int f = s.find_first_not_of(" "); int e = s.find_last_not_of(" "); if (f == string::npos) return ""; return std::string(s, f, e - f + 1); } // 문자열의 왼쪽 공백문자 제거 std::string TrimLeft(const std::string& s) { if (s.length() == 0) return s; int f = s.find_first_not_of(" "); if (f == string::npos) return ""; return std::string(s, f); } // 문자열의 오른쪽 공백문자 제거 std::string TrimRight(const std::string& s) { if (s.length() == 0) return s; int e = s.find_last_not_of(" "); if (e == string::npos) return ""; return std::string(s, 0, e + 1); } // 문자열을 대문자로 변환해주는 함수 std::string ToUpper(const std::string &s) { std::string t; char* buf = new char[s.length()]; s.copy(buf, s.length()); for (int i = 0; i < s.length(); i++) { buf[i] = toupper(buf[i]); } t = std::string(buf, s.length()); delete buf; return t; } // 문자열을 소문자로 변환해주는 함수 std::string ToLower(const std::string &s) { std::string t; char* buf = new char[s.length()]; s.copy(buf, s.length()); for (int i = 0; i < s.length(); i++) { buf[i] = tolower(buf[i]); } t = std::string(buf, s.length()); delete buf; return t; } // 문자열을 16진수로 변환 bool StrToHex(long& hex, const std::string& str) { if (str.empty()) hex = 0; else { char *stopstring; hex = strtol(str.c_str(), &stopstring, 16); //16은 16진수를 의미 } return true; } // sprintf 구현 #define _MAX_CHARS 8000 int Format(std::string& txt, const TCHAR* szFormat, ...) { std::vector _buffer(_MAX_CHARS); va_list argList; va_start(argList,szFormat); #ifdef _UNICODE int ret = _vsnwprintf(&_buffer[0],_MAX_CHARS,szFormat,argList); #else int ret = _vsnprintf(&_buffer[0], _MAX_CHARS, szFormat, argList); #endif va_end(argList); txt.assign(&_buffer[0], ret); return ret; } int main() { std::string str = " When one door of happiness closes, another opens "; cout << str << "." << endl; cout << Trim(str) << "." << endl; cout << TrimLeft(str) << "." << endl; cout << TrimRight(str) << "." << endl; cout << ToUpper(str) << "." << endl; cout << ToLower(str) << "." << endl; long lnum = 0l; StrToHex(lnum, "0xAB"); cout << "0xAB " << lnum << endl; Format(str, "eleven is %d", 11); cout << str << endl; return 0; }
'컴퓨터공학 기초 > C.C++' 카테고리의 다른 글
string split 함수 (stl vector) (0) | 2013.04.26 |
---|---|
virtual 응용(원리, 다중상속) (0) | 2012.05.09 |
알고리즘 실습 모음 (링크) (0) | 2011.09.16 |
STL - 결합 컨테이너 (1) | 2011.09.16 |
STL - copy()와 특별한 이터레이터 (0) | 2011.09.16 |