Language/C++

C++ :: string 문자열

VallistA2014. 6. 1. 12:35

0. 개요


이번에 프로젝트를 하게 되면서 기존 c/c++ 을 많이 사용했는데, 

string 이라는 문자열을 기존에 쓸까 말까 하다가.. 결국 length 등 수많은 메소드를 가지고있는 string을 활용 해봄키로 했습니다.


사용할때는 String 이라고 하지 않고 string 이라고 하는것을 참고 해주시면 되겠습니다..



1. string 이 무엇이냐?


그럼 이제, String 에 대해서 들어가기전 String이 무엇인지부터 알아봅시다.
string은 c++ 표준 라이브러리에서 지원하는 class 입니다.


string은 c언어에서의 가장 큰 문제점으로 제기되왔던 문자열을 사용하기 위해서 char 형 배열을 만들어야 한다는 것에 대해서 극복하기 위해 만들어 졌습니다.

문자 배열은 속도가 상당히 빠르지만, 영어가 아닌 2byte의 언어들을 사용할때는 2개의 배열공간을 할당 받아야 했기에 제한이 있었습니다.

또 이것 말고도 여러가지 버그등 문제점이 많아서 c++ 에서 조치가 치뤄진 것이 string 입니다.


string class는 문자열, stl 호환 등 다양하고 범용적이게 사용될 수 있습니다.



2. string 의 사용법

먼저 c++에서 string 라이브 러리를 사용하기 위해서는

#include <string> 

을 Include 해주어야 합니다.


string은 char형으로 내부에서 취급됩니다. 그러므로 문자열 초기화도 기존과 다를것이 없습니다.


#include string
#include iostream

int main()
{
     string str("Vallista의 블로그");
     string str = "Vallista의 블로그";
     return 0;
}


필자의 경우 보통 2가지 방법을 선호 합니다. (또 있던가.?)

자신이 편한 방식으로 표현 해주시면 되겠습니다.


2.1 string 의 사용법 2


앞서 개요에서 length 등이라고 말했는데, 이것에대해 궁금증을 가지신 독자 분들이 계실것 입니다.

string 에서는 string 클래스 내부에 함수들이 존재합니다.

이 함수들을 잘 이용하는 것으로 문자열 파싱등 수많은 문자열 장난을 효율적으로 사용하실 수 있는 계기가 될 것입니다.

이제 그 함수들에 대해서 좀더 깊게 알아보도록 하겠습니다.


2.1.1 문자열 자르기

문자열을 자를때 에는

string 함수 내에 있는 substr을 사용합니다.

한번 사용해보도록 하겠습니다.

#include string
#include iostream

int main()
{
     string str("Vallista의 블로그");

     string str2 = str.substr(0,7);

     return 0;
}

이렇게 해서 한번 출력을 해보도록 합시다. 그러면 Vallista가 나올것입니다.


여기서 중요시 여겨야할 사항은

substr의 첫번째 인자부터 시작해서 두번째 인자갯수 만큼 가져오는거라 보시면 되겠습니다.

그 말은 즉 str.substr(3 , 7) 이면 3~7 까지가 아닌 3 ~ 3+7 까지라고 보시면 됩니다.


string 에서는 간단한 방식으로 문자열을 잘라낼수 있습니다.


2.1.2 문자열 길이 구하기

문자열 파싱이나, 문자열 만큼 반복을 하고 싶을 때 필수불가결 적으로 문자열의 길이를 알아와야 할 것입니다.

그것에 대해서 string은 2가지 방법론을 넣어놓았습니다.


length 와 Size 라고 하는 녀석들 입니다.

서로 이름은 틀리지만 하는 일은 같습니다.

#include string
#include iostream

int main()
{
     string str("Vallista의 블로그");

     int size = str.size();
     int length = str.length();

     return 0;
}

한번 출력해 봅시다. 그러면 똑같은 값이 나올 것 입니다.

여기서 중요한 것은 str.size와 length 를 쓸때에는 <= 가 아닌 <를 써주어야 합니다.

for(int i = 0 ; i < str.size() ; i++) 로 해주어야 한다는 말 입니다.

그 이유는 for문을 써보셨으면 알 것 입니다.


2.1.3 문자열 찾기

문자열에 대해 우리가 찾는 문자열이 있거나, 없을때를 찾아서 넣어주어야 할 일이 필수적으로 생길 것 입니다.

그 상황을 대비해(?) string 에서는 문자열을 찾는 함수를 지원합니다.


문자열을 찾는 함수는 여러가지가 있습니다.



 멤버함수 

 작동법 

 find()

 주어진 문자열을 처음으로 나타나는 곳을 반환합니다 (중첩 됩니다.)

 find_first_of()

 find()와 같지만 처음 찾는 곳을 기준으로 반환합니다

 find_first_not_of()

 주어진 문자가 아닌 문자의 첫 문자 위치를 반환합니다

 find_last_of()

 find()와 같지만 마지막으로 나온 문자열을 기준으로 반환합니다.

 find_last_not_of()

 주어진 문자가 아닌 문자의 마지막 문자 위치를 반환합니다.

 rfind()

 거꾸로 탐색합니다. 


여러가지 함수를 통해서 효율적인 search를 지원하기에 잘 판단하셔서 사용하시면 될 것입니다.

여기서 핵심은 포인터로 반환받기 때문에 string * 형으로 받아야 한다는 것 입니다.


#include string
#include iostream

int main()
{
     string str("Vallista의 블로그");

     string::size_type pos = str.find("a");

     return 0;
}

이렇게 해서 한번 출력을 해보시면 감이 잡히실 것 입니다.

각각 옵션별로 한번 해보시기 바랍니다.

a는 문자열에 2개가 있으므로 재미있는 결과를 도출하게 될 것 입니다.


2.1.4 문자열의 시작과 끝


문자열에는 시작과 끝을 나타내는 메소드가 존재하는데 , 그것이 바로 begin() , end() 입니다.

문자열도 내부 구성은 stl과 비슷한 구조로 되어있기 때문에 지원을 하게됩니다.


#include string
#include iostream

int main()
{
     string str("Vallista의 블로그");

     string::size_type spos = str.begin();
     string::size_type epos = str.end();

     return 0;
}

spos와 epos를 출력해보세요

그러면 흥미로운 결과를 도출 할 수 있게 되실 것 입니다.

이것으로 size와 같은 효과를 나타내도록 연산을 꾸밀 수 있으실 것 입니다.


3. 끝마치며


우리가 게임을 만들거나 어플리케이션을 만들거나, 모든 작품들을 제작할때 많이 기여되는 부분에 Text 가 있지 않을까 생각합니다.


많은 용도로 사용하게되는 문자열을 오늘 기회로 한번더 돌아보게 되었습니다.


프로그래머를 지향하시는 모든 분들께 많은 도움이 있기를 바라면서 이만 글을 마치도록 하겠습니다.





'Language > C++' 카테고리의 다른 글

C++ 11 :: Uniform Initialization  (0) 2014.10.20
C++ 11 :: Range Based For  (0) 2014.10.20
C++ 11 :: Auto  (0) 2014.10.20
C++ :: 문자열 split (string tokenizer)  (2) 2014.06.01
C++ :: 절대값을 사용하는 문제 1  (0) 2014.05.18

댓글

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!

자고 싶습니다. ㅠㅠ

Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today :

Total :

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘

Lately Post

Lately Comment