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 :
Lately Post
Lately Comment