C에서는 char*
또는 char[]
의 형태로 문자열을 다뤘다면,
C++에서는 문자열을 하나의 변수 Type 처럼 사용합니다.
문자열을 변수 type으로 사용하면,
문자열을 훨씬 다양하고 쉽게 다룰 수 있게 해주는데요,
char*
, char[]
과 다르게
문자열 끝에 \0
문자가 들어가지 않으며, 문자열의 길이를 동적으로 변경 가능합니다.
string 은 C++ STL에서 제공하는 클래스로, 말 그대로 문자열을 다루는 클래스입니다.
C++의 입출력 방식인 cin
, cout
으로 입출력이 가능하며,
getline
함수도 사용할 수 있습니다.
string str; // 문자열 생성
cin >> str; // 공백(space) 이전까지의 문자열을 입력 받는다.
getline(cin, str); // `\n` 이전까지의 문자열, 즉 한 줄을 통째로 입력 받는다.(공백 포함)
getline(cin, str, 'a'); // 'a' 문자 이전까지의 문자열을 입력 받는다.
cout << str; // 문자열을 출력한다.
string의 사용을 위해서는 먼저 <string>
헤더 파일을 추가해 주어야합니다.
#include <string>
int main()
{
string str; // 빈 문자열 str 생성
string str = "abcdef";
string str; // "abcdef"로 선언된 str 생성
str = "abcdef";
string str("abcdef"); // "abcdef"로 선언된 str 생성
string str2(str1); // str1 문자열을 복사한 str2 생성
char s[] = {'a', 'b', 'c', 'd', 'e', 'f'};
string str(s); // C에서의 문자열과 호환 가능
string* str = new string("abcdef"); // new를 이용한 동적 할당
return 0;
}
**string 클래스에 <, >, ==, + 등과 같은 연산자들을 사용할 수 있습니다.
string 클래스에는 유용한 멤버 함수들이 정말 많습니다.
string st;로 선언되었다고 가정하고 멤버 함수들을 살펴보겠습니다.
str.at(index);
index 위치의 문자 반환. 유효한 범위인지 체크 O
str[index];
index 위치의 문자 반환. 유효 범위 체크 X, 따라서 at보다 접근 빠름
str.front();
문자열의 가장 앞 문자 반환
str.back();
문자열의 가장 뒷 문자 반환
str.length();
문자열 길이 반환
str.size();
문자열 길이 반환 (length와 동일)
str.capacity();
문자열이 사용중인 메모리 크기 반환
str.resize(n);
str을 n의 크기로 만든다.
기존보다 n이 작다면 남은 부분 삭제, 크다면 빈 공간으로 채움
str.resize(n, 'a');
n이 str의 길이보다 크다면, 빈 공간을 'a'로 채움
str.shrink_to_fit();
str의 capacity가 실제 사용하는 메모리보다 큰 경우, 메모리를 줄여줌
str.reserve(n);
size = n 만큼의 메모리를 미리 할당 함
str.empty();
str이 빈 문자열인지 확인
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 문자열을 할당 (변수 정의와 동일)
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인경우 음수, 반대면 양수 반환
swap(str1, str2);
str1과 str2를 바꿔줌. reference 교환 방식
isdigit(c);
c문자가 숫자면 true, 아니면 false 반환
isalpha(c);
c 문자가 영어면 true, 아니면 false를 반환
toupper(c);
c 문자를 대문자로 변환
tolower(c);
c 문자를 소문자로 변환
참조 : Rebro의 코딩 일기장