참고 >
배열에 대한 기초적 이해
문자열로 별찍기, 다이아몬드 만들기
문자열을 다루는 표준 라이브러리 함수
C++ 환경에는 문자열을 처리하기 위한 표준적인 함수가 이미 제공되어 있다. 이 함수들을 표준 라이브러리(standard library)라고 부른다. 이 표준 라이브러리에는 다양한 문자열 조작 함수가 정의되어 있다. 이 함수들을 코드에서 이용하면 문자열의 길이를 측정하거나 복사하는 작업을 쉽게 할 수 있다. 다음은 표준 라이브러리의 주요 문자열 조작 함수이다.
문자열을 다루는 표준 라이브러리 함수(<string>) |
size t strlen(const char* s); |
: 문자열 s에서 NULL 문자를 제외한 길이를 리턴한다. |
char* strcpy(char* s1, const char* s2); |
: 문자열 s2를 배열 s1에 복사한 후, s1을 리턴한다. |
char* strcat(char* s1, const char* s2); |
: 문자열 s2를 문자열 s1의 끝에 붙이고, s1을 리턴한다. |
int strcmp(const char* s1, const char* s2); |
문자열 s1과 문자열 s2를 비교해서 문자열 s1이 문자열 s2보다 작을 때 : 음수 값 문자열 s1이 문자열 s2와 동일할 경우: 0 문자열 s2보다 큰 경우: 양수 값을 리턴 |
표준 라이브러리 함수를 사용하려면 각 함수의 기능을 제공하는 파일을 인클루드 해야 한다. 문자열 조작 함수를 사용하려면, 소스 파일 앞머리에 #include <string> 라고 적어야 한다.
다음 코드는 표준 라이브러리 함수 중에서 strlen() 함수를 이용한 '문자열의 길이를 구하는 코드이다.
이처럼 표준 라이브버리 함수인 strlen() 함수를 사용하면 문자열의 길이를 확인할 수 있다. strlen() 함수가 리턴하는 문자열의 길이에는 '\0' 이 포함되어 있지 않다!!
코드를 통해 char, string 살펴보기
다음 코드를 살펴보면,
이 코드를 실행시키면,
이렇게 출력이 되는 이유는, 배열은 첫 주소를 담는 포인터의 역할을 하며 첫 주소부터 연속된 메모리이기 때문이다.
따라서 B를 출력했을 때 abc라고 출력되는 이유는, 첫 주소를 읽어 와서 연속적으로 읽어내기 때문이다.
또한 B는 첫 주소를 담고 있고, 배열은 연속된 메모리가 할당되게 때문에 B+1을 출력하면 컴파일러는 다음 주소를 읽어와서 bc가 출력된다.
또한 이 배열은 정적배열이며, 정적배열은 사이즈를 바꿀 수 없다. 따라서 B에 새로운 값을 대입하는 식은 작동하지 않는다.
string은 그 생김새가 배열과 비슷해서 배열로 오해할 수 있지만, string은 배열이 아니라 객체(object)이다.
string은 동적배열을 컨테이너로 갖는 객체이다. string을 사용하면 char배열에서 할 수 없었던 작업들을 쉽게 할 수 있다.
string은 사이즈를 바꿀 수 있다.
capacity를 살펴보면 string에 들어가는 문자열이 늘어나고 줄어듦에따라 자동으로 capacity가 늘어나고 줄어드는 것을 확인할 수 있다.
D. clear() 과 D.shrink_to_fit() 을 사용해서 사이즈가 capacity를 초기화시킬 수 있다.
front() 와 back() 함수를 사용해서 맨앞과 맨뒤의 값을 출력할 수 있다.
반복자를 통해 맨 뒤의 값과 맨 앞의 값을 확인할 수 있다.
둘 모두 a, d가 순서대로 출력된다.
for문을 사용해서 D의 값을 출력할 때, 배열을 그대로 출력하는 방법과 반복자 iterator을 통해서 출력하는 방법 두 가지가 있다. a, b, f, d 가 순서대로 두 번 출력된다.
pop_back() 은 끝에서 값을 제거, push_back(' ')은 끝에 값을 추가.
abfd 에서 d를 제거하고 a 를 추가했으니, abfa가 출력된다.
erase() 를 통해 중간 삭제, insert( , )를 통해 중간 삽입을 할 수 있다.
출력값은 abaa 가 된다.
C++ string은 문자열 합치기를 지원한다.
출력값은 rrrrrr 이 된다.
참고로 - 연산자는 작동하지 않는다. (되었다면 완벽했을텐데....)
반복문 for를 사용해서, string F의 값이 b 이거나 e 일 경우 삭제하도록 코드를 짜 봤다.
포인트는 i-- 인데, 문자열 중간의 한 문자를 삭제할 경우 한 칸씩 당겨지게 되므로, 다음 문자열로 넘어가서 검색하려면 반드시 i를 하나 빼야한다.
출력 결과는 aacc이다.
문자열에서 문자, 문자열을 탐색하는 방법에는 index를 선언한 후에 find함수를 사용하는 방법이 있다.
find() 함수의 리턴값은 바로 그 문자열의 위치(배열번호 위치, 즉 0번 부터 시작한다.)를 반환하기 때문에, index에는 1이 대입될 것이고, if를 통해 그 문자, 문자열이 존재하는지 아닌지 알아낼 수 있다.
'C++ 코딩 > C++ 기초개념' 카테고리의 다른 글
<C++ 기초> 클래스 Class의 기본 - 맴버, 멤버함수, private, public, protect, 캡슐화 (1) | 2021.02.24 |
---|---|
<C++ 기초> 식과 연산자, 연산자의 종류와 우선순위 (0) | 2021.02.23 |
<C++ 기초> 동적배열, sti vector, 멤버함수 (0) | 2021.02.18 |
<C++ 기초> typedef, 열거형 enum (0) | 2021.02.16 |
<C++ 기초> 메모리 동적 확보, 배열의 동적인 확보 (0) | 2021.02.14 |
<C++ 기초> 변수와 스코프(지역변수와 전역변수) 02.14 (0) | 2021.02.14 |
<C++ 기초> 메모리 구조 힙, 스택, 데이터, 코드 (0) | 2021.02.09 |
<C++ 기초> 배열에 대한 이해, 문자열과 배열, char 02.08 (0) | 2021.02.08 |