Coding/C++

[ C++ ] Chapter 4.6 : 문자열 std::string

ted0505 2022. 2. 1. 11:37

문자열 : 문자가 나열되어 있는 것.

 

*c, c++에서 기본적으로 제공해주는 것은 한 글자(char). 한 글자(char)를 여러개(배열) 나열하는 방식으로 문자열을 사용한다.

 

#문자열 std::string

const char my_strs [] = "hello, world";
const string my_hello = "hello, world";
  • #include <string>
  • c와는 다르게 string 자료형이 존재.
    • 기본 자료형이 아닌 헤더파일을 통해 만들어진 사용자 정의 자료형 ( string 클래스 객체라고 생각 )

#문자열 입력 

cout << "your name ? ";
string name;
cin << name;

cout << "your age ? ";
string age;
cin << age;
  • cin 은 공백 단위로 입력을 받는다.
    • cin << name 에 jung jun hyeok 를 입력시 jung 만 name에 들어가고 나머지는 버퍼에 저장해두었다가 다음 cin에 넣어버림.
cout << "your name ? ";
string name;
std::getline(cin, name);

cout << "your age ? ";
string age;
std::getline(cin, age);
  • std::getline 사용.
    • getline 은 줄바꿈 단위로 입력을 받는다.

#버퍼 주의사항

  • cin 입력은 줄바꿈 문자는 버퍼에 남긴다.
    • cin 입력 다음에 getline 입력이 있다면 
      • cin 입력은 줄바꿈 문자를 버퍼에 남기고, getline 입력은 줄바꿈 문자까지 읽기 때문에
      • cout << "your age ? : ";
        int age;
        cin >> age;
        
        cout << "your name ? : ";
        string name;
        std::getline(cin, name);
        your age : 1	// cin 입력으로 1을 입력하여 엔터
        your name :	// 입력을 받지 않고 바로 종료​
      • cin 이 1을 입력받고 줄바꿈 문자는 버퍼에 남김.
        • getline 은 버퍼에 남아있던 줄바꿈문자를 입력받아 NULL로 변환해 name에 저장.
  • 이와 같은 상황을 막기 위해, cin 입력 후 버퍼에 남아있는 것을 지워주기.
    • std::cin.ignore();
      • 버퍼에 남아있는 개행문자까지 싹 지워준다.
      • cout << "your age ? : ";
        int age;
        cin >> age;
        
        std::cin.ignore(32767, '\n');
        
        cout << "your name ? : ";
        string name;
        std::getline(cin, name);
      • std::cin.ignore(32767, '\n');
        • '\n' ( 줄바꿈문자 ) 을 만날 때까지 32767개의 문자를 무시해라 - > 입력버퍼 지우기
          • 32767은 2byte 짜리 문자로 입력할 수 있는 것의 최대치.
          • 하지만, 32767은 매직넘버이기 때문에, 직관적으로 볼 수 있게 해주는 것이 좋음.
            • include <limits>
            • std::numeric_limits<std::streamsize>max()

#문자열의 덧셈

  • 문자열의 덧셈 -> 문자열끼리 이어붙이는 것
  • string a("Hello,"):
    string b("World.");
    string hw = a + b;
    
    hw +=  "I'm good";
    
    cout << hw << endl;
    • Hello,World.I'm good
       
    • 문자열끼리 더하는 것 - > append

#문자열 길이

string a("hello, world");

cout << a.length() << endl;

return 0;
  • .length()
    • 스트링 문자열의 개수를 리턴한다.