본문 바로가기

C..C++....

문자열 사용..

CString(CAtlstring)을 사용하면 기본적을 지원하는 기능이지만
stl의 string 을 사용하다보면 불편한점이 한둘이 아니다..

가장먼저 CString  
#include <atlstr.h>//헤더
#include <iostream>//헤더
/*
#ifdef _UNICODE  //유니코드일 경우
 typedef CAtlStringW CAtlString;
#else
 typedef  CAtlStringA CAtlstring;
#end
typedef CAtlString CString;
*/
void main()
{
  CString szTest;
  szTest.format(_T("%d,%s"),10,_T("test"));
  szTest.MakeUpper(); //대문자로 변환!
  szTest.MakeLower(); //소문자로 변환!
  int pos = 0;
  CString token;
  while((token = szTest.Tokenize(_T(","),pos)) !=_T("")) //문자열 자르기. 구분자 ","
     std::cout << token << std::endl;  
}
 대부분의 문자열 처리를 CString 에서 다 할수 있다...

그런데 멀티 플렛폼을 지향하지도 않고
계속해서 윈도우 운영체제에서만 돌아가는 프로그램만을 짤텐데도
불편함을 감수하고 자꾸만 String만 사용하는건 뭐지 -_-;
#include <iostream>//헤더
#include <string>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
#include <boost/tokenizer.hpp>
typedef std::basic_string<TCHAR> tstring; //CString처럼 프로젝트에 따라서 유니코드 멀티바이트가 되도록..
typedef boost::basic_format<TCHAR> tformat; // boost::format와 boost::wformat를 문자셋에 맞게 쓰기위해..
typedef boost::tokenizer<boost::char_delimiters_separator<TCHAR>
             ,tstring::const_iterator,tstring> ttokenizer;

int main()
{
    tstring str; //string로 CString::format처럼 사용하기.
    str = boost::str(tformat(_T("1234,567,%d,%s"))%10%_T("TEST"));//%로 구분하는거의 주의할것!
    boost::algorithm::to_upper(str);//대문자로 변환.
    boost::algorithm::to_lower(str);//소문자로 변환.

    boost::char_separator sep(_T(","));//토큰시 사용할 구분자
   // boost::tokenizer<boost::char_separator<TCHAR>> tok(str ,sep);
   // boost::tokenizer<boost::char_separator<TCHAR>>::iterator iter = tok.begin();
    ttokenizer tok(str,sep);
    ttokenizer::iterator iter = tok.begin()
    for(;iter!= tok.end(); iter++)
    {
      std::cout << *iter << endl;
    }
  return 0;
}