C++ Chapter 4.5 : 문자열 std::string 소개

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


문자열 std::string

const string hello = "Hello, World";
const char hello2 [] = "Hello, World";
const string hello3 **{**"Hello, World"**}**
  • #include <string>
  • C 와는 다르게 string 이라는 자료형이 존재한다.
    • 기본 자료형이 아닌 사용자 정의 자료형 (string 클래스 객체라고 생각하면 됨)
    • C는 문자열을 배열과 char [] 포인터 char * 로 표현
    • string 헤더파일(string클래스) 에 string을 다룰 수 있는 여러가지 기능 有


문자열 입력

std::cin

cout << "Your name ? : ";
string name;
cin >> name;

cout << "Your age ? : ";
string age;
cin >> age;
  • #include <iostream>
  • 콘솔 입력
  • << 스트림 연산자를 필요로 한다.
  • cin 입력은 공백 단위로 입력 받는다.
    • 콘솔에 An So Hyun 입력시 An만 name에 들어가고
      • age는 입력도 안했는데 버퍼에 있던 So Hyun이 age에 들어가며 입력이 끝난다.
    • 마치 scanf
  • cin 입력은 Enter 줄바꿈 문자는 읽지 않으며 버퍼에 남긴다.
    • cin 입력 다음에 getline 입력이 있다면
      • cin 입력은 줄바꿈 문자를 버퍼에 남기고 getline은 줄바꿈 문자 까지도 읽으므로
      • 다음 getline에서 줄바꿈 문자를 읽어들여 잘못된 결과를 낳을 수 있다.

          	cout << "Your age ? : ";
              int age;    
              cin >> age;
        
              cout << "Your name ? : ";
              string name;
              std::getline(std::cin, name);
        
        • 콘솔창

            Your age ? : 3    // 3이라고 입력 후 엔터 (세살 ㅎ)
            Your name ? :   // 입력 하기도 전에 바로 종료되어버림
          
          • cin 이 3만 받은 후 엔터 줄바꿈 문자는 버퍼에 남겨놓음
          • name이 getline으로 버퍼에 있던 줄바꿈 문자를 받아 null로 변환해 name에 저장. NULL 이 name에 입력으로 들어감
            • getline은 줄바꿈 문자를 null로 변환해 읽어들인다.
      • 이를 막기 위해 cin 입력 후 입력 버퍼 비워주기
        • std:: cin. ignore
          • 버퍼에 남아있는 개행문자까지 싹 버퍼를 비워준다.
            	cout << "Your age ? : ";
                int age;    
                cin >> age;
          
            	std::cin.ignore(32767, '\n');
          
                cout << "Your name ? : ";
                string name;
                std::getline(std::cin, name);
          
          • std::cin.ignore(32767, ‘\n’);
            • ‘\n’ 을 만날때까지 32767개 글자를 무시해라 → 입력버퍼 비우기
              • 32767은 2byte로 표현할 수 있는 개수의 최대
              • 다만 이렇게 32767 이라는 쌩 숫자를 넣는 것은 좋지 않다.
              • 이렇게 썡 숫자를 쓰지 않으려면 #include 하고
                • std::numeric_limits::max() 해주면됨


std::getline

cout << "Your name ? : ";
string name;
std::getline(std::cin, name);

cout << "Your age ? : ";
string age;
std::getline(std::cin, age);
  • #include <string>
  • 함수 형태 std::getline(입력받을 파일, 어느 string 에 받을지)
  • 매개변수 std::cin 넣을 시 콘솔 입력
  • std::cin.getline이랑 다르다.
  • getline 은 공백도 받으며 **Enter 줄바꿈 단위로** 입력 받는다.
    • 라인 단위로 받는다.
    • 줄바꿈 문자가 나올때까지 읽음.
    • 콘솔에 An So Hyun 입력시 name에 “An So Hyun” 다 들어간다.
  • getline 은 줄바꿈 문자도 읽어들이며 읽어들인 줄바꿈 문자를 NULL로 바꿔 저장한다.
    • 줄바꿈 문자도 버퍼에 남기지 않음


문자열 덧셈 연산자

  • #include <string>
  • 문자열끼리의 덧셈 → 문자열을 서로 이어 붙인다.
    • a + b → b를 a뒤에 붙인다.
    • string 헤더파일 클래스에 + 가 오버로딩 되어있어서 가능한 것
      #include <string>
    
      string a("Hello, ");
      string b("World!");
    
      std::cout << a + b << endl; // Hello, World! 출력
    


문자열 길이

#include <string>
string a;
  • #include <string>
  • a. length() : 스트링 문자열의 글자수를 리턴한다. (문자열 끝에 ‘\0’은 세지 않는다.)


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기