[자료구조] 문자열 정리

Posted by DHniyeo Blog on May 4, 2024

개요

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에서 해당 헤더파일을 따로 추가하지 않아도 사용가능하다.

그 이유는 두 가지가 존재한다.

  1. 다른 표준 라이브러리 헤더들 중 하나가 <string> 헤더를 내부적으로 포함하고 있는 경우

 <iostream> 헤더의 경우 <string> 헤더를 자체적으로 포함하고 있기에 string 클래스의 사용이 가능하다.

  1. 컴파일러 자체적으로 표준 라이브러리 사용을 제공하는 경우

컴파일러가 기본적으로 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-질문있습니다