CC++ String 관련 내용 정리

 
 
Introduction

  C/C++ 및 MFC, win32 API를 사용하다보면, 자주 부딪히는 문제들로 string 변환이 있습니다. 일전에 블로그에 포스팅해두고 항상 참고하면서 사용했지만, 블로그 초기화를 몇번 하다보니, 자료가 사라져 다시 포스팅합니다. 이전에는 소스코드를 열어서 일일이 찾아서 작업을 하였지만, 이것마져 귀찮아지네요~^^;; 옛날에는 옛날대로 자료들을 공개하지 않는 마인드들이 많다보니 그때는 자료가 없었지만 지금은 시간이 지나면 자연스럽게 생겨나는게 정보이다보니, 오랫동안 묵혀두는 정보는 아무런 필요 없는 것이 아닐까 하네요. 
 
 
C언어에서 printf()에 0으로 자릿수 맞추기 

 
간혹가다 시간(time)과 관련한 작업을 할 때, 자릿수를 맞춰야하는 경우가 있습니다. 
  • 예시
    • 2001년 1월 2일 오전 3시 4분 5초
    • => 2001-01-02 03:04:05 로 0이 포함되어 출력이 되어야 하는 경우에 필요 함
#include <stdio.h>

int main(void) {

  // 숫자 앞의 빈자리에 영(0) 추가하기
  // 04 이렇게 제로와 총 자릿수를 지정하면 됩니다
  printf("%d\n", 123);      // 123
  printf("%04d\n", 123);    // 0123
  printf("%08d\n", 123);    // 00000123

  // 맨끝 자리에 정렬하기; 오른쪽 정렬
  // 숫자가 최대 8자라면
  // %8d 이런 포맷을 삽입합니다.
  printf("%8d\n", 123);     //      123
  printf("%8d\n", 1234);    //     1234
  printf("%8d\n", 1234567); //  1234567

  return 0;
}
 
숫자로 된 파일명 데이터 셋 파일 읽기

for (int imageNum = 1; imageNum < NUMBER_OF_TESTING_SAMPLES+1; imageNum++)
{
     //get an image
    string filename("data/");
    stringstream out;
    out << imageNum;
    filename += "training" + out.str() + ".png" ;


    Mat image_src = imread(filename.c_str(), 0);  // load the image
    Mat image;

    // 생략...
}
 
Mat grayImg = imread(postiveImagePath + to_string(( long double )(i+1)) + ".jpg" ,  0);
if(grayImg.empty()) return ;
 

 

 

 
String간의 문자열 비교

string a = "I am string one! ;)";
string b = "string;

if (a.compare(b) == 0) {
    // 두 문자열이 같을 때
}
else if (a.compare(b) < 0)  {
    // a가 b보다 사전순으로 앞일 때
}
else if (a.compare(b) > 0)  {
    // a가 b보다 사전순으로 뒤일 때
}
 
 
How to get file extension from string in C++

#include <iostream>#include <string>

int main(){
  std::string fn = "filename.conf";
  if(fn.substr(fn.find_last_of(".") + 1) == "conf") {
    std::cout << "Yes..." << std::endl;
  } else {
    std::cout << "No..." << std::endl;
  }}
 
CString <=> std::string <=> std:wstring 상호변환

 
참고자료
ANSI <=> UNICODE 변환함수 : A(Ansi), T(Unicode)
ANSI => UNICODE : CA2CT( [ANSI 문자열] )
UNICODE => ANSI : CT2CA( [UNICODE 문자열] )

 

기본 코드
CString cstr = _T("CString문자열");
std::string str = "string문자열";
std::wstring wstr = L"wstring문자열";

CString cstr2;
std::string str2;
std::wstring wstr2;
 
변환코드
//string => CString 으로 변환
cstr2 = CA2CT(str.c_str());
MessageBox(cstr2.GetBuffer(0), _T("string => CString"), MB_OK);

//wstring => CString 으로 변환
cstr2 = wstr.c_str();
MessageBox(cstr2.GetBuffer(0), _T("wstring => CString"), MB_OK);

//CString => string 으로 변환
str = CT2CA(cstr.operator LPCWSTR());
MessageBox(CA2CT(str.c_str()), _T("CString => string"), MB_OK);

//wstring => string 으로 변환
str = CT2CA(wstr.c_str());
MessageBox(CA2CT(str.c_str()), _T("wstring => string"), MB_OK);

//CString => wstring
wstr = cstr.operator LPCWSTR();
MessageBox(wstr.c_str(), _T("CString => wstring"), MB_OK);

//string => wstring
wstr = CA2CT(str.c_str());
MessageBox(wstr.c_str(), _T("string => wstring"), MB_OK);
 
 
 
 
 
 
 

이 글을 공유하기

댓글(0)

Designed by JB FACTORY