C++ string 클래스

규규·2024년 3월 14일
0

C++

목록 보기
13/21

문자열 관련 Header 파일

  • string : C++ 스타일 문자열 처리 C++ 라이브러리
  • string.h : C 스타일 문자열 처리 C 라이브러리 (ex: strcpy,strlen)
  • cstring : C 스타일 문자열 처리 C++ 라이브러리 (string.h 와 동일)

stirng 클래스

string 클래스란

  • C++ STL에서 제공하는 클래스로, 말 그대로 string(문자열)을 다루는 클래스이다.
  • C에서는 char* 또는 char[] 의 형태로 문자열을 다뤘다면, C++에서는 문자열을 하나의 변수 type처럼 사용하며, 문자열을 훨씬 다양하고 쉽게 다룰 수 있게 해 준다. 
  • char* , char[] 과 다르게 문자열의 끝에 '\0' 문자가 들어가지 않으며, 문자열의 길이를 동적으로 변경 가능하다.
  • string을 이용하기 위해서는 먼저 <string> 헤더 파일을 추가해주어야 한다. 

string 클래스 입/출력

  • C++ 입출력 방식인 cin , cout 으로 입출력이 가능하며, getline 함수도 이용할 수 있다. C에서의 scanf와 printf는 사용이 불가능하다. 
  • 예시)
string str;         // 문자열 생성
cin >> str;          // 공백(space) 이전까지의 문자열을 입력받는다.
getline(cin, str);         // '\n' 이전까지의 문자열, 즉 한 줄을 통째로 입력받는다.  (공백 포함)
getline(cin, str, 'a')     // 'a' 문자 이전까지의 문자열을 입력받는다. getline(cin, str, '\n') == getline(cin, str)  
cout << str;        // 문자열을 출력한다.

string 클래스 생성

  • 예시)
string str; // 빈 문자열 str 생성
string str = "abcdef"; // "abcdef" 로 선언된 str 생성
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를 이용한 동적할당

string 클래스 연산자 활용

  • string 클래스에 <, >, ==, + 등과 같은 연산자들을 사용할 수 있다. 
  • 문자열 비교 (<, >, ==) : 두 문자열의 사전 순서를 비교, 또는 동일 여부를 확인할 수 있다. 
  • 문자열 연결 (+) : 두 문자열을 이어주는 역할을 한다. 

string 클래스의 멤버 함수

  • string의 특정 원소 접근
    • str.at(index): index 위치의 문자 반환. 유효한 범위인지 체크 O
    • str[index]: index 위치의 문자 반환. 유효한 범위인지 체크 X. 따라서 at 함수보다 접근이 빠름
    • str.front(): 문자열의 가장 앞 문자 반환
    • str.back(): 문자열의 가장 뒤 문자 반환
  • 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이 빈 문자열인지 확인
  • 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.pop_back(): str의 맨 뒤의 문자를 제거
  • 기타 유용한 string 멤버 함수
    • str.find("abcd"): "abcd"가 str에 포함되어있는지를 확인. 찾으면 해당 부분의 첫번째 index를 반환
    • str.find("abcd", n): n번째 index부터 "abcd"를 find
      • 못 찾을 경우 string::npos 를 반환
      • *string::npos 는 size_t 타입의 최대값을 의미. OS 에 따라 달라짐.
    • str.substr(n): str의 n번째 index부터 끝까지의 문자를 부분문자열로 반환
    • str.substr(n, k): str의 n번째 index부터 k개의 문자를 부분문자열로 반환
    • str.compare(str2): str과 str2가 같은지를 비교. 같다면 0, str<str2 인 경우 음수, str>str2 인 경우 양수를 반환
    • toupper(c): c 문자를 대문자로 변환
    • tolower(c): c 문자를 소문자로 변환

다른 data type stirng 으로 변환

  • to_string()
    • 숫자 type data 를 string 타입으로 변경
    • string header include 해야 함.
    • 함수 원형
      • string to_string (int num);
      • string to_string (long num);
      • string to_string (long long num);
      • string to_string (unsigned num);
      • string to_string (unsigned long num);
      • string to_string (unsigned long long num);
      • string to_string (float num);
      • string to_string (double num);
      • string to_string (long double num);
  • std::string str(<char []>)
    • char array 를 string 으로 변경하여 string data type 변수 생성
  • string str3 = test_char;
    • 예시)
    	char arr[] = { 'J', 'O', 'U', 'R', 'N', 'A', 'L', 'D', 'E', 'V' }; 
    	
    		int size_arr = sizeof(arr) / sizeof(char); 
    		string str = ""; 
    		str = arr;
  • boost::lexical_cast<std::string>()

출처:

profile
복습용 저장소

0개의 댓글