개요
C++ 에서 사용가능한 String 클래스에 대해서 알아보고 사용법 및 관련 함수를 정리하였다.
1. string 클래스
C++ STL 기본제공 클래스로 C에서는 char*, char[] 의 형태로 문자열을 다루었다면, C++에서는 문자열을 하나의 자료형 처럼 사용 하여 문자열을 더 쉽게 다룰 수 있다.
이때 string 같은 경우는 끝에 \0문자가 들어가지 않고, 문자열의 길이를 동적으로 변경 가능하다.
2. string의 입/출력
C++의 기본 입출력 방식인 cin, cout 으로 입출력이 가능하고 getline 함수도 사용 가능하다.
단, C에서 사용하던 scanf, printf는 사용 불가능
1
2
3
4
5
6
'''예시'''
string str; // 문자열 생성
cin >> str; // 공백(space)이전의 문자열을 입력받음.
getline(cin, str); // '\n'이전까지의 문자열을 통째로 입력받음.(공백 포함)
getline(cin, str,'a') // 'a'문자 이전까지 문자열을 입력받음. getline(cin, str, '\n') == getline(cin, str)
cout << str; // 문자열을 출력.
3. string 클래스 생성
string 라이브러리를 헤더에 추가하여 사용할 수 있다.
방법 | 설명 |
---|---|
string str; | 빈 문자열 str 생성 |
string str = “abcd” | “abcd”로 선언된 str 생성 |
string str; | |
str = “abcd” | “abcd”로 선언된 str 생성 |
string str(”abcd”) | “abcd”로 선언된 str 생성 |
string str2(str1) | str1 문자열을 복사 str2 생성 |
char s[]={’a’,’b’,’c’,’d’}; | |
string str(s) | C에서의 문자열과 호환 가능 |
string *str = new string(”abcd”) | new를 이용한 동적할당 |
undefined 물론 Visual Studio에서 해당 헤더파일을 따로 추가하지 않아도 사용가능하다.
그 이유는 두 가지가 존재한다.
- 다른 표준 라이브러리 헤더들 중 하나가
<string>
헤더를 내부적으로 포함하고 있는 경우
<iostream>
헤더의 경우 <string>
헤더를 자체적으로 포함하고 있기에 string
클래스의 사용이 가능하다.
- 컴파일러 자체적으로 표준 라이브러리 사용을 제공하는 경우
컴파일러가 기본적으로 C++ 표준 라이브러리를 사용하는 경우, 명시적으로 <string>
헤더를 포함시키지 않아도 사용이 가능하다.
하지만, 다른 환경, 다른 컴파일러에서는 정상 동작하지 않을 수도 있으며, 코드의 가독성을 위해 string 헤더를 포함해주는 것이 좋을 듯하다.
4. string 클래스 연산자 활용
- 문자열 비교(<,>,==) : 두 문자열의 사전 순서를 비교, 또는 동일 여부 확인 가능
- 문자열 연결(+) : 두 문자열을 연결
5. string 클래스의 멤버 함수
- string의 특정 원소 접근
방법 | 설명 |
---|---|
str.at(index) | index 위치의 문자 반환. 유효한 범위인지 체크 O |
str[index] | index 위치의 문자 반환. 유효한 범위인지 체크 X. 따라서 at 함수보다 접근이 빠름 |
str.front() | 문자열의 가장 앞 문자 반환 |
str.back() | 문자열의 가장 뒤 문자 반환 |
undefined- string의 크기
방법 | 설명 |
---|---|
str.length() | 문자열 길이 반환 |
str.size() | 문자열 길이 반환 (length와 동일) |
str.capacity() | 문자열이 사용중인 메모리 크기 반환 |
str.resize(n) | string을 n의 크기로 만듦. 기존의 문자열 길이보다 n이 작다면 남은 부분은 삭제하고, n이 크다면 빈 공간으로 채움 |
str.resize(n, ‘a’) | n이 string의 길이보다 더 크다면, 빈 공간을 ‘a’로 채움 |
str.shrink_to_fit() | string의 capacity가 실제 사용하는 메모리보다 큰 경우 낭비되는 메모리가 없도록 메모리를 줄여줌 |
str.reserve(n) | size = n만큼의 메모리를 미리 할당해줌 |
str.empty() | str이 빈 문자열인지 확인 |
undefined- string에 삽입, 추가, 삭제
방법 | 설명 |
---|---|
str.append(str2) | str 뒤에 str2 문자열을 이어 붙여줌 (‘+’ 와 같은 역할) |
str.append(str2, n, m) | str 뒤에 ‘str2의 n index부터 m개의 문자’를 이어 붙여줌 |
str.append(n, ‘a’) | str 뒤에 n개의 ‘a’를 이어 붙여줌 |
str.insert(n, str2) | n번째 index 앞에 str2 문자열을 삽입함. |
str.replace(n, k, str2) | n번째 index부터 k개의 문자를 str2로 대체함 |
str.clear() | 저장된 문자열을 모두 지움 |
str.erase(n, m) | n번째 index부터 m개의 문자를 지움 |
str.erase(n, m) (iterator) | n~m index의 문자열을 지움 (n과 m은 iterator) |
str.erase() | clear와 같은 동작 |
str.push_back(c) | str의 맨 뒤에 c 문자를 붙여줌 |
str.pop_back() | str의 맨 뒤의 문자를 제거 |
str.assign(str2) | str에 str2 문자열을 할당. (변수 정의와 동일) |
undefined- 기타 유용한 string 멤버 함수
방법 | 설명 |
---|---|
str.find(“abcd”) | “abcd”가 str에 포함되어있는지를 확인. 찾으면 해당 부분의 첫번째 index를 반환 |
str.find(“abcd”, n) | n번째 index부터 “abcd”를 find |
str.substr() | str 전체를 반환 |
str.substr(n) | str의 n번째 index부터 끝까지의 문자를 부분문자열로 반환 |
str.substr(n, k) | str의 n번째 index부터 k개의 문자를 부분문자열로 반환 |
str.compare(str2) | str과 str2가 같은지를 비교. 같다면 0, str<str2 인 경우 음수, str>str2 인 경우 양수를 반환 |
swap(str1, str2) | str1과 str2를 바꿔줌. reference를 교환하는 방식 |
isdigit(c) | c 문자가 숫자이면 true, 아니면 false를 반환 |
isalpha(c) | c 문자가 영어이면 true, 아니면 false를 반환 |
toupper(c) | c 문자를 대문자로 변환 |
tolower(c) | c 문자를 소문자로 변환 |
undefined
참고 사이트
https://rebro.kr/53 (출처)
https://www.inflearn.com/questions/838873/헤더파일-include-질문있습니다