string 은 텍스트나 문자열에 쓰이며
"" 큰 따옴표로 둘러쌓인 부분을 저장한다
"문자열"을 사용하기 위해서는
추가로 <string> 헤더 파일 라이브러리(헤더) 를 포함시켜줄 필요가 있다
다만, 없어도 동작은 한다
헤더를 추가하던 추가하지 않건 결과값도 똑같이 출력
+ 연산자를 사용해 문자열끼리 더해서 새로운 문자열 변수를 만들 수 있는데,
이를 concatenation 이라고 부른다
string firstName = "John ";
string lastName = "Doe";
string fullName = firstName + lastName;
cout << fullName;

위와 같이 각 변수에 필요한 띄어쓰기를 넣어서 사용할 수도 있고,
string fullName = firstName + " " + lastName;
이렇게 마지막에 문자열끼리 합쳐줄 때 띄어쓰기를 넣어줄 수도 있다
string 은 문자열에 대해 특정 연산을 수행할 수 있는 "함수" 를 포함하는 오브젝트로,
예를 들어 아래와 같은 형태도 가능하다.
string firstName = "John ";
string lastName = "Doe";
string fullName = firstName.append(lastName);
cout << fullName;

append()는 문자열 뒤에 문자열을 붙여주는+역할을 하는 함수
의미는 추가, 확장
※ 주의
C++ 에선 + 연산자를 "더하기" 랑 "연결(concatenation)" 양쪽 모두에 쓴다
숫자는 더해지고, 문자열은 연결된다
그렇기 때문에 문자열과 숫자를 더하려고 하면 에러가 발생
string x = "10";
int y = 20;
string z = x + y;

"문자열의 길이" 를 구하고 싶다면, length() 함수를 사용할 수 있다
string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "이 문자열의 길이는: " << txt.length();

[] 대괄호 안에 "인덱스 번호" 를 넣어서
문자열에서 그 인덱스 번호에 해당하는 문자(문자열 요소)를 확인할 수 있다
string myString = "Hello";
cout << myString[0]; // 인덱스는 0부터 시작

string myString="Hello";
cout << myString[myString.length() - 1]; // 문자열 길이에 -1, 인덱스는 0부터 시작이니까 
이 구조를 이용해서 문자열의 일부만 바꿔줄 수도 있다
string A = "Hello";
A[0] = 'y'; // 단일 캐릭터라 '' 를 사용
cout << A;

""를 사용해보면 오류가 뜬다.
단일 캐릭터라 자동으로 char, const char 로 인식하는 듯
<string> 헤더 라이브러리에는 at() 함수도 있는데,
위에 나온 [] 과 똑같이 작동한다
string myString = "Hello";
cout << myString;
cout << myString.at(0); // 첫 글자
cout << myString.at(1); // 두번째 글자
cout << myString.at(myString.length() - 1); // 마지막 글자
myString.at(0) = 'J';
cout << myString; // Jello
혹시 이런
at()같은 함수들 때문에
<string>라이브러리를 추가해줄 필요가 있나 하고 실험했지만,
마찬가지로 정상 작동했다
우리가 문자열을 사용할 때는 "" 를 포함하기 때문에,
경우에 따라선 이로 인해 에러가 날 수 있다
string txt = "우리는 "하나다".";

이러한 문제를 회피하기 위해선
\ 백슬래시를 사용하면 된다
\ = backslash escape character 는 특수기호를 일반 문자로 변환해준다
\' = '\" = "\\ = \그래서 이걸 이용해 위 코드를 고치면:
string txt = "우리는 \"하나다\".";

같은 escape character 로
\n: 개행 ,\t: 탭 추가 , 가 있다
cin 과 >> 을 사용해 숫자를 입력받을 때 처럼
문자열도 똑같이 입력받을 수 있다
string yourName;
cout << "이름을 입력해주세요: ";
cin >> yourName;
cout << "당신의 이름은: " << yourName;
입력을 받는 과정을 실험해볼 수 없어서 여기서부터
http://www.codeblocks.org/ 의 mingw-setup.exe 를 사용

프로그램을 써도 마찬가지로
<string>헤더 없이 작동했다
※ cin 은 입력을 받을 때 '공백' 을 일종의 '종료 신호'로 인식하기 때문에,
띄어쓰기로 여러 단어를 넣어도 한 단어밖에 인식을 못한다

이러한 이유 때문에,
문자열을 작업할 때는 getline() 함수를 자주 사용한다
getline() 의 괄호 안에 첫 번째 파라미터로 cin 을 넣고,
두 번째 파라미터로 문자열 변수를 넣어주면 된다
string fullName;
cout << "Type your full name: ";
getline (cin, fullName);
cout << "Your name is: " << fullName;

코드에 따라서는 "standard namespace library", std 선언이 없는 경우가 있는데,
using namespace std 를 위에 걸어줘도 되고
이를 생략하고 밑에서 std 키워드와 :: 연산자를 사용함으로써 같은 효과를 낼수있다
#include <iostream>
#include <string>
// using namespace std; 생략
int main() {
std::string greeting = "Hello";
std::cout << greeting;
return 0;
}

#include <string>구문을,
쓰지 않고도 문제없이 작동하지만 초반에 선언하라고 강조되는 이유에 대해선,
<iostream>같은 다른 표준 헤더 라이브러리 안에
<string>이 가진 기능들이 포함되어 있어서
문제없이 작동은 하지만, 환경에 따라 상황이 변할 수 있으니
명시적으로 표시해 주는 것이 좋다. 라는 느낌이라고 한다.
참고)
C++ 가 아닌 C 에서는 문자열을 string 이 아닌 char 를 사용해 만드는데,
다른 프로그래밍 언어에서도 문자열 변수 생성에
string 이 쓰이지 않는 경우가 있어서 참고 차 적어둔다.
C++ 는 C 에서 파생되었기 때문에,
아직 C 에서 문자열을 만들던 방식도 지원을 한다
C 에서의 방식으로 문자열을 만드는 방법은 : char 의 "배열" 을 사용한다.
string A = "Hello";
char B[] = "Hello";
C++ 에는 수학적인 기능을 수행해 줄 다양한 "함수" 가 있다.
max(x, y) 함수는 x 와 y 사이 최대값을 구해준다
cout << max(5, 10);
min(x, y) 함수는 반대로 최솟값.
cout << min(5, 10);
<cmath> 라이브러리sqrt (square root=제곱근), round (rounds a number=올림), log (natural logarithm=자연로그, e) 등의 함수들은
<cmath> 헤더 라이브러리에 포함된다
이것도 라이브러리 추가 없이 동작하는지 실험
빌드 단계에서 에러가 뜬다
프로그래밍에선 불린 같이 두 가지 중 하나의 값만 가질 수 있는 데이터가 필요할 때가 많다
C++ 에선 bool 타입으로 쓰이며, true에 해당하는 1 과
false에 해당하는 0 값만 가질 수 있다
다만, 불린은 단독으로 쓰이기보단
무언가 "비교" 할 때에 많이 사용된다.
"boolean expression",
"참/거짓 표현식" 이라고 할 수 있는데,
로직을 빌드하고 정답을 찾는데 유용하다.
비교 연산자 > < 등등을 통해
무언가를 비교하고 참/거짓으로 판별할 수 있다
int x = 10;
int y = 9;
cout << (x > y); // 비교한 결과를 출력할 수 있도록 () 를 사용한 듯

아래 같이 작성해도 된다 :
cout << (10 > 9);
또는 == 를 사용한 예시 :
int x = 10;
cout << (x == 10);
cout << (10 == 15);
"투표권 여부를 확인하기 위해 18세 이상인지 확인"
int myAge = 25;
int votingAge = 18;
cout << (myAge >= votingAge);
여기서 이후 배울 "if...else" statement(명령문, 구문?) 까지 활용해보면 :
int yourAge; int votingAge = 18;
cin >> yourAge;
if (yourAge >= votingAge) {
cout << "투표 가능";
} else {
cout << "투표 불가";
}
