2025. 4. 2. 21:27ㆍProgramming Language/C++
1. std::string
std::string은 C++ 표준 라이브러리에서 제공하는 문자열 클래스로 C 스타일 문자열(char[], char*)의 단점을 보완한 객체 지향적 문자열 타입이다
메모리 자동 관리, 연산자 오버로딩, 편리한 문자열 조작 함수들이 내장되어 있다.
std의 string을 사용하기 위해서는 가장 먼저 헤더를 선언해줘야 한다.
#include <string>
*보통 #include <iostream>에도 포함되어 있음
2. 사용방법
기본적으로 std::string의 사용방법은
std::string 변수명 = 문자열;
과 같은 방법으로 사용 가능하며 실 사용 예시를 보자면
std::string s1 = "String";
과 같이 사용한다.
3. 주요 기능 및 메서드
std::string은 기존에 char[] 의 형태로 구성되어 있던 문자열과 다르게 간편하게 사용할 수 있는 기능들을 가지고 있다.
3-1) 문자열의 길이 확인
std::string에서의 문자열의 길이 확인은 str.length(), str.size() 함수를 사용한다
#str.length()
문자열.length();
와 같이 사용하며
이렇게 사용할 수 있다.
#str.size()
문자열.size();
와 같이 사용하며
length와 동일한 결과를 출력한다.
3-2) 문자의 접근
std::string의 경우 각 요소에 접근하는 방식이 두가지가 있다.
# str[i]
해당 방식은 기존에도 사용하던 방식으로
문자열[접근하고자하는 요소의 index];
와 같이 사용한다.
# str.at(i)
이건 기존이랑 접근방식이 조금 다른 방법으로
문자열.at(접근하고자하는 요소의 index);
와 같이 사용한다.
3-3) 문자열 붙이기
기존엔 char[]으로 구성된 문자열의 경우는 strcat함수를 사용해서
strcat(기존 문자열(해당 문자열에 추가된 문자열이 붙어 저장됨), 추가될 문자열);
와 같이 사용되었었으나 std::string의 경우에는 그냥 + 연산자를 사용해서 붙여줄 수 있다.
아래와 같이 선언만 해두고
추가로 값을 더해주는 것으로 할당 하는것도 가능하다
추가로 그냥 문자를 + 연산해서 넣어주는 것도 가능하다.
3-4) 문자열 비교하기
문자열의 비교 또한 기존에는 strcmp 함수를 사용해서
std::strcmp(str0, str1)
로 비교했던 방식을 std::string에 들어오면서
이렇게 그냥 단순 비교하듯이 사용해도
비교가 가능하다.
3-5) 문자열의 일부분 추출하기
string의 경우는 문자열의 일부를 함수 하나로 범위를 지정해서 추출이 가능하다.
str.substr(시작점, 길이);
로 어디 시작점부터 얼마만큼의 길이만큼 추출을 해주는 함수이다.
이렇게 작성하고 실행해보면
이렇게 잘 추출하는 것을 볼 수 있다.
함수를 사용할때 주의할 점은 시작점을 포함해서 추출해준다는 것이다.
StringMasterHello에서 M은 6번째 인덱스이고 이를 포함해서 6개만큼의 문자를 출력해준 결과가 Master이다.
3-6) 문자열 찾기
문자열의 내부에서 찾고자 하는 문자열의 시작지점을 알려주는 함수가 존재한다.
str.find(찾고자하는 문자열);
이 결과는 찾고자 하는 문자열이 str에 어디에 위치하고 있는지 index를 반환한다.
이 함수와 기존에 길이 찾는 함수 + 부분 추출하는 함수를 사용하면 문자열 내부에서 해당 함수를 외부로 추출도 가능하게 할 수 있다.
별 의미는 없지만 활용할 간단한 예시라고 봐주면 될듯 하다.
3-7) 문자열의 삽입
문자열의 안에 원하는 문자열을 삽입할 수 있도록 해주는 insert()라는 함수가 존재한다.
사용 방법은 아래와 같고
str.insert(위치, 문자열) // 원하는 위치에 문자열을 삽입한다
str.insert(위치, 반복 횟수, 문자) // 원하는 위치에 문자를(char, 단일 문자) 원하는 횟수만큼 삽입한다
실 사용의 예를 보자면
두번째 인자로 반복횟수가 추가된다면 세번째 인자로는 단일 문자가 전달되어야만 한다.
3-8) 문자열의 삭제
문자열 내부에 특정 범위만큼의 문자열을 삭제하는 것도 가능하다.
str.erase(삭제시작지점); // 시작지점부터 끝까지 삭제
str.erase(삭제시작지점, 삭제하고자 하는 길이); // 삭제 시작 지점부터 n개 문자 삭제
str.erase(iterator); // iterator로 지정된 문자 삭제
str.erase(begin, end); // 구간 삭제
각각 예시를 보자면
# str.erase(삭제 시작 지점)
지정한 삭제 시작 지점부터 끝까지 모두 제거한다
# str.erase(삭제시작지점, 삭제하고자 하는 길이)
지정한 위치부터 지정한 길이만큼을 지운다.
# str.erase(iterator), str.erase(begin, end) - 조금 복잡한듯 싶어 이 부분은 나중에 보기로 하자.
3-9) 문자열의 변환
atoi, atof 혹은 sprintf와 같이 문자을 정수 혹은 실수로, 정수 혹은 실수를 문자로 바꾸는 방법을 더 간단하게 사용이 가능하다
// String을 정수로
std::stoi(std::string 변수 혹은 문자열);
// String을 실수로
std::stof(std::string 변수 혹은 문자열);
// 정수, 실수를 String으로
std::to_string(int 변수 혹은 숫자);
std::to_string(float 변수 혹은 숫자);
#String을 정수로: std::stoi()
혹은 직접 문자열을 넣는것으로도 변경이 가능하다.
#String을 실수로: std::stoi()
문제없이 반환하여 할당되는 것을 확인할 수 있다.
# 정수, 실수를 String으로 : std::to_string()
float형으로 넣어도 문제 없이 변환한다.
위와 동일하게 그냥 직접 숫자를 넣어줘도 변환이 가능하다
3-10) char[]형을 string으로, string을 char[]로 변환
#char[]형을 string으로 변환
std::string(str);
#string을 char[]형으로 변환
str.c_str()
을 사용하는데 저걸 사용하면 우선 char형 포인터가 만들어진다
이걸 strcpy를 사용해서
std::string s1 = "String";
char str1 [10];
std::strcpy(str1, s1.c_str());
과 같이 사용하면 string 타입에서 char[] 타입으로 변경이 가능하다.
3-11) string을 입력받기
기존엔 std::cin.getline()을 사용할때 첫번째 전달인자로 저장할 장소, char []을 넣어주고 두번째로는 얼마만큼의 크기를 입력받을지를 설정했었는데 string의 경우는 다른 함수이며 다른 방식을 사용한다.
std::getline(cin, string 변수);
정상적으로 받는 것을 볼 수 있다.
다수의 입력을 받을때도
이렇게 공백문자가 있더라도 우리가 바라는 입력 방식으로 모든 값을 받아줄 수 있다.
'Programming Language > C++' 카테고리의 다른 글
Ch06. 복합데이터 - 06. 공용체(union) (0) | 2025.04.02 |
---|---|
Ch06. 복합데이터 - 05. 구조체 (0) | 2025.04.02 |
Ch06. 복합데이터 - 03. 문자열 (0) | 2025.04.01 |
Ch06. 복합데이터 - 02. 다차원 배열 (0) | 2025.04.01 |
Ch06. 복합데이터 - 01. 배열(Array) (0) | 2025.04.01 |