문자열 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’은 세지 않는다.$)$
'C │ C++ │ C# > C++' 카테고리의 다른 글
C++ Chapter 4.7 : 기존 자료형에게 가명 붙여주기 (0) | 2023.08.21 |
---|---|
C++ Chapter 4.6 : 열거형과 열거형 클래스 (1) | 2023.08.20 |
C++ Chapter 4.4 : auto와 자료형 추론, 형변환 (0) | 2023.08.19 |
C++ Chapter 4.3 : using문과 모호성 (0) | 2023.08.19 |
C++ Chapter 4.2 : 정적변수, 전역변수, 내부연결, 외부연결 (0) | 2023.08.18 |