[C++] String 클래스 정리 및 사용법
Intro
코딩테스트 문제를 풀어보면 문자열을 잘 다뤄야하는 문제가 굉장히 많다.
이번 포스팅에서는 C++ 에서 문자열 사용을 유용하게 해주는 string 클래스에 대해서 정리한다.
String Class
- C++ 에서는 문자열을 다루기 위해 string 클래스를 사용할 수 있다.
- 간단하게
헤더를 추가하면 된다.
// string 헤더 추가
#include <string>
선언 및 초기화
- C언어와 달리 마지막에 ‘\0’가 삽입되지 않아도 된다.
#include <string>
using namespace std;
int main()
{
// 1. 선언과 동시에 초기화
string s1 = "Hello";
string s2("Hello");
// 2. 변수를 통한 초기화
string s3(s1);
}
string 클래스의 다양한 멤버 함수
- 문자열을 다룰 때 자주 사용되는 함수들을 정리해봤다.
#include <string>
using namespace std;
int main()
{
// 1. string의 특정 원소에 접근
str.at(index); // index번째의 원소를 반환
str[index]; // index번째의 원소를 반환
str.front(); // str의 첫번재 원소를 반환
str.back(); // str의 마지막 원소를 반환
/*
str.at(index) 과 str[index] 의 차이점
- str.at(index) 는 index가 유효한 범위인지 확인한다.
*/
// 2. string의 크기
str.length(); // str의 길이를 반환
str.size(); // str의 길이를 반환
str.capacity(); // str에 할당된 메모리 크기를 반환
str.empty(); // str이 빈 문자열인지 확인하고 T/F 반환
// 3. string에 삽입, 추가, 삭제
str.append(str1, n, m); // str 뒤에 str1를 이어붙임
// str1의 n번째부터 m번째까지를 붙임(n,m은 생략가능)
str.insert(n, str1); // str의 n번째 index 앞에 str1을 삽입
str.replace(n, k, str1); // str의 n번째 index부터 k개의 문자를 str1으로 대체
str.erase(n, m); // str의 n번째 index부터 m개의 문자를 지움
str.push_back(char c); // vector와 동일하게 str뒤에 '문자'를 붙여줌
// 4. 기타 유용한 멤버 함수
str.find(str1, n); // str에 str1이 포함되어있는지 확인(있다면 첫번째 index 반환)
// n번째 index부터 str1이 포함되어있는지 확인(n생략 가능)
str.substr(n, k); // str의 n번째부터 k개의 문자를 반환
str.compare(str1); // str과 str1을 비교
// 같으면 0, str < str1 : 음수, str > str1 : 양수
isdigit(c); // 문자 c가 숫자이면 true
isalpha(c); // 문자 c가 영어이면 true
toupper(c); // 문자 c를 대문자로 변환
tolower(c); // 문자 c를 소문자로 변환
}
알아두면 좋은점
-
string은 원하는곳에 문자열을 삽입하거나 삭제할 수 있지만 시간복잡도 O(N)이 소요된다.
-
string 뒤에 문자열을 삽입할 때 ‘+’ 연산자를 사용하면 되는데, 이때 대입연산자를 사용하는것이 더 빠르다.
/*
1번 방식의 시간복잡도는 O(N)
2번 방식의 시간복잡도는 O(N^2)
Why?
1번 방식은 문자열 str의 마지막에 "A"가 추가되는 방식
2번 방식은 매번 새로운 문자열을 만들어내는것
- JAVA에서는 항상 "str += 'A'" 이라고 써도 "str = str + 'A'"로 변환된다고 한다.
*/
string str = "abc";
// 1번 방식
for(int i = 0;i < 1000000; i++)
{
str += "A";
}
// 2번 방식
for(int i = 0;i < 1000000; i++)
{
str = str + "A";
}
댓글남기기