[#1] STD :: String Class

Fuji ㅣ 2022. 8. 24. 20:25

목차

  • 초기화
  • 입력
  • 인터페이스

 


string class 초기화 

string 사용법
  • string 클래스를 사용하기 위해선 string.h 또는 cstring의 헤더파일을 추가해야한다.
  • string 클래스는 일반적으로 std:: 표준 라이브러리의 네임스페이스에 정의되어있다.

 

table
생성자 설명
string() 크기가 0인 디폴트 string 객체를 생성한다. (디폴트 생성자)
string(const char* s) string 객체를 s가 가리키는 문자열로 초기화한다.
string(size_type n, char c) 문자 c로 초기화된 n개의 string객체를 생성한다.
string(const string& str) str객체로 복사 생성자를 호출해서 초기화한다.
string(const char* s, size_type n) string 객체를 초기화
template<class Iter>
string(Iter begin, Iter end)
string 객체를 [begin, end)의 범위에 있는 값들로 초기화한다. begin, end는 포인터의 역할이며 위치를 가리킨다. begin의 범위는 포함하고 end는 포함하지 않는 end 바로 앞까지를 의미한다.
string(const string& str, size_type pos, size_type n = npos)  string 객체를 string 객체의 str로 초기화한다. str에 있는 pos 위치에서부터 str의 끝까지 가거나, n 문자를 사용하되 str의 끝을 넘어갈 수 없다.
string(string&& str) noexcept string 객체를 string 객체 str로 초기화한다. (move 생성자)
string(initializer_list<char> il) string 객체를 초기자 목록 il에 있는 문자로 초기화한다.

 

test code
#include <iostream>
#include <cstring>  // string class

int main(void)
{
	using namespace std;
	const char* ch = "string class";
	char ch2[6] = { 'b', 'a', 'n', 'a', 'n', 'a' };

	// 크기가 0인 string 객체 생성
	string str1();

	// 문자열로 초기화
	string str2("Programming");
	string str3(ch);

	// n개의 문자 c로 초기화
	string str4(5, 't');

	// 복사생성자를 통한 초기화
	string str5(str2);

	// n까지의 문자열만 복사해서 초기화
	string str6("my name is Fubao", 5);
	string str7("my name is Fubao", 20);
	string str8(str7, 5);

	// += , + 오버로딩 
	string str9 = str6 + str2;
	str9 += str2;

	// ch2 배열 인덱스를 이용한 초기화
	string str10(&ch2[3], &ch2[5]);

	// 상수 문자열 범위를 이용한 초기화
	string str11(&ch[0], &ch[4]);

	// 이터레이터 포인터를 이용하여 초기화
	string str12(str2.begin(), str2.end() - 3);

	// string객체를 이용해서 10개의 문자를 복사하며 n번째 위치(5)부터 시작한다. 
	string str13(str7, 3, 10);

	return 0;
}

 

ouput

 


 

string class 입력

입력 

cstdlib 헤더파일에 있는 getline 함수를 이용해서 버퍼에 있는 \n 개행 문자를 비우고 한 행을 읽을 수 있다. \n 개행 문자 대신 다른 문자를 넣어서 해당 문자를 제외한 문자열을 입력받는 형태도 가능하다.

 

#include <iostream>
#include <string>   // string
#include <cstdlib>  // getline

int main(void)
{
	using namespace std;
	
	string str;
	getline(cin, str);        // \n 개행문자는 버려진다
	string str1;
	getline(cin, str1, ':');  // : 문자를 만날때까지 읽는다.

	return 0;
}

 

  • 위 코드처럼 : 가 구분 문자로 지정되면 개행 문자는 그냥 일반 문자가 된다.
  • cin >> str을 하게되면 개행문자가 남게되는데 이를 지워주기 위해선 다음 코드를 사용하면 된다.

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

 


 

string class 인터페이스

string 인덱스 접근 메서드
사용 방법 설명
 s.at(n)  string 문자열의 i번째 참조(범위검사 함)
 s.[n]  string 문자열의 i번째 참조(범위검사 안함)
 s.front()  string 문자열의 첫번째 요소 반환(char type)
 s.back()  string 문자열의 마지막 요소 반환(char type) 
 s.c_str()   string 문자열을 const char* 로 접근할 수 있도록 해준다('\0' 문자 포함) 

여기서 범위 검사는 허용되는 크기를 넘어선 숫자가 들어올 경우 검사를 통해 예외를 던지는지 안던지는지 여부이다.

at은 범위를 넘어선 값이 들어올 경우 std::out_of_range의 예외를 던진다.  반면 범위 검사를 하지않는 []의 경우 컴파일 단계에서 디버깅이 된다.

 

String 이터레이터 메서드
메서드명 설명
 s.begin()  string의 시작 주소 반환 
 s.end()  string의 (마지막 + 1) 주소 반환 
 s.rbegin()  string의 마지막 주소를 반환 
 s.rend()  string의 (첫번 째 - 1 ) 주소 반환 

 

String Capacity (크기 확인)
메서드명 설명
 s.empty()   string이 비어있으면 true, 아니면 false 반환
 s.size(), s.length()  string에 들어있는 요소에 대한 길이 반환 
 s.capacity()   string에 할당된 실제 크기 반환 
 s.max_size()   string에 할당될 수 있는 최대 메모리 크기 반환 
 s.reserve(숫자)  해당 숫자만큼 capactiy 길이를 설정 
 s.shrink_to_fit()   잔여 capacity 공간을 조절해 준다. 
  • size()와 length()의 차이점은 length()는 오래된 버전부터 사용해오던 함수이고 size()는 STL과의 호환성을 위해 추가된 버전이다. 기능상의 차이는 없다

 

String 인터페이스 
메서드명 설명
 s.clear()  s에 있는 값들을 지워준다. (size = 0)
 s.insert()  s에 사용자가 원하는 위치에 문자 삽입 가능
 s.erase()  s문자열 중 사용자가 원하는 부분 삭제
 s.push_back()   s문자열 뒤에 단어 추가. (문자열 X, 문자 O)
 s.pop_back()   s문자열 맨 뒤 단어 하나 삭제. (s.size() - 1) 
 s.operator +=   문자열 뒤에 문자열 추가 가능
 s.append()  문자열 뒤에 문자열 추가 가능
 s.compare()   문자열 비교 함수 
 s.replace()   문자열 수정
 s.substr()   문자열 중 원하는 부분을 잘라서 넘겨준다. 
 s.copy()   s문자열을 (char [])형식의 배열 변수에 복사
 s.resize()   s문자열 길이를 수정
 s.swap()   s문자열과 다른 문자열을 서로 바꿈 
 s.starts_with(문자열)   s문자열에 대해 입력한 문자열이 시작 위치부터 동일한지 여부
 s.ends_with(문자열)   s문자열에 대해 입력한 문자열이 끝 위치부터 동일한지 여부

 

String Search (문자 찾기)
메서드명 설명
 find(문자 or 문자열)  찾은 index값을 정수형태로 넘겨준다. 못찾으면 -1을 반환  
 rfind(문자 or 문자열)   find와 동일하지만 뒤에서부터 찾는다. 
 find_first_of(문자 or 문자열)  문자 or 문자열 중 첫 index부터 검색해서 하나라도 맞으면 
 해당 index 값을 반환. 못찾으면 쓰레기값 반환(npos)
 find_first_not_of(문자 or 문자열)  문자 or 문자열 중 첫 index부터 검색해서 없는 값을 찾아내 
 해당 index를 반환. 모두 포함되 있다면 -1 반환
 find_last_of(문자 or 문자열)  문자 or 문자열 중 마지막 index부터 검색해서 하나라도 맞으면
 해당 index 값을 반환. 못찾으면 쓰레기값 반환(npos)
 find_last_not_of(문자 or 문자열)  문자 or 문자열 중 마지막 index부터 검색해서 없는 
 값을 찾아내 해당 index를 반환. 모두 포함되 있다면 -1 반환

 

인터페이스 내용 출처

https://hwan-shell.tistory.com/120