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 입력 다음에 getline 입력이 있다면
- 이와 같은 상황을 막기 위해, 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()
- '\n' ( 줄바꿈문자 ) 을 만날 때까지 32767개의 문자를 무시해라 - > 입력버퍼 지우기
- std::cin.ignore();
#문자열의 덧셈
- 문자열의 덧셈 -> 문자열끼리 이어붙이는 것
-
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()
- 스트링 문자열의 개수를 리턴한다.