C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[644] [TIP] 문자열 다루기
멀더 [mulder] 7617 읽음    2007-05-11 14:56
안녕하세요. 멀더입니다.
구글 형님이 도와 주시고 여러 개발자들이 모아주신
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);

    }
};
//-------------------------------------------------------------------------------
WARSHIP [warship]   2007-05-11 15:56 X
일반적으로 위와같은 기능함수들의 경우 입력된 Object는 변경시키지 않고 Object에 대해 처리된 새로운 Object를 리턴하는 식으로 구현을 하던것 같습니다. 물론 목적에 따라 원본을 변경시킬수도 있지만요.. 그런방식으로 구현해주시는건 어떨까요? .... 그냥 지나가는 길에 끄적거려보고 갑니다.. ㅡ,ㅡ; 기분나쁘셨다면 죄송합니다.
멀더 [mulder]   2007-05-11 16:09 X
just tip .... NOT LIBRARY

+ -

관련 글 리스트
644 [TIP] 문자열 다루기 멀더 7617 2007/05/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.