C++ Chapter 4.5 : 문자열 std::string 소개
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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
- 콘솔에 An So Hyun 입력시 An만 name에 들어가고
- 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::numeric_limits
- ‘\n’ 을 만날때까지 32767개 글자를 무시해라 → 입력버퍼 비우기
- cin 입력 다음에 getline 입력이 있다면
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’은 세지 않는다.)
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기