본문 바로가기
C │ C++ │ C#/C++

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

by Pokaa 2023. 8. 20.
728x90
728x90
SMALL
문자열 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’은 세지 않는다.$)$
728x90
300x250
LIST