본문 바로가기

프로그래밍/C, C++

C/C++ 문자열 호환

C Style 

#include <cstring>


- 문자열의 생성 및 복사

char src[] = "문자열";


int len = strlen(src); // 문자열의 길이를 측정 

 이 때, strlen은 문자열의 마지막 널값 0을 뺀 채로 반환한다.


char* dest = new char[len+1]; // 새로운 문자열이 들어갈 공간 할당


strcpy(dest, src); // 2번째 인자를 1번째 인자로 복사


- 문자열의 비교와 결합

char str1[20] = "abcde";

char str2[] = "fghij";


strcat(str1, str2); // 문자열의 결합

                         str1 뒤에 str2를 결합한다. 

                         결합한 문자열은 str1에 보관


if( strcmp( str1, "abcdefghij" ) == 0 ) // 문자열의 비교 

     // 문자열의 내용이 같은 경우 0을 반환한다.


 C++ Style

#include <string>


- 문자열 생성 및 복사

string src = "C++ Style";

string desc;


desc = src; // 문자열 복사

src.size(); // 문자열 길이


- 문자열의 비교와 결합

string str1 = "abcde";

string str2 = "fghij";


str1 += str2; // str1 뒤에 str를 결합, 

                    결합한 문자열은 str1에 보관


if( str1 == "abcdefghij" ) // 문자열의 비교


- 문자열의 검색

string text = "abcdefghijklmnopqrstuvwxyz";


if( sChatMessage.find("m") != sChatMessage.npos ) // string::find()는 검색 후 검색할 단어나 문장이 없을 경우

         string::npos를 반환한다.


- 문자열의 일부분 얻기

string path = "c:\\My Document\\Pictures\\33.jpg"; // 경로를 표현할 때 조심할 점 \를 2번 쓸 것.

       1번은 이스케이프 문자열로 인식되기 때문이다.


int len = path.size(); // 문자열의 길이를 얻어둔다.


string ext = path.substr( len - 3, 3 ); // 문자열 객체 path에서 끝의 3바이트만 읽어온다.


 C Style과 C++ Style의 조화

 1) C 스타일에서 C++ 스타일로의 형변환

char cstyle[] = "What Are You Style?";


string cppstyle;


cppstyle = cstyle; // 대입 연산자를 사용해서 대입하면 자동으로 변환한다.


 2) string 객체에서 C 스타일의 문자열 얻기

string cppstyle = "I'm cppstyle";


const char* cstyle = NULL; // C 스타일의 문자열을 가리킬 포인터를 준비


cstyle = cppstyle.c_str(); // string 클래스의 c_str() 함수는 C 스타일 문자열의 주소를 반환한다.

이 주소에 포인터 변수 cstyle을 보관한다.


 3) C++ 스타일에서 C 스타일로의 변환

string cppstyle = "I'm cppstyle";


char* cstyle = new char[ cppstyle.size() + 1 ]; // C 스타일 문자열을 담을 공간을 준비


strcpy( cstyle, cppstyle.c_str() ); // cppstyle 객체에서 문자열의 포인터를 얻어와서 strcpy() 함수를 호출한다.