티스토리 뷰
문자열 / std::string
헤더 파일 선언
#include<string>
일반 변수와 같이 초기화가 가능하다.
std::string myStr;
myStr = "Hi";
std::string myStr("21");
std::string myStr("Hello World!");
문자열 입출력
#include<iostream>
#include<string>
int main()
{
std::string name;
std::cin >> name;
std::string age;
std::cin >> age;
cout << "name is" << name << "\n" << "age is" << age << endl;
}
결과물
John Lion
25
name is John
age is Lion
이렇게 나오게는 되는 이유는 std::cin의 경우 입력을 받을 때, 첫 번째 공백 전 까지의 입력만을 처리하게 되어 다음 추출은 cin 내부의 남게 되버린다.
따라서 위 결과물이 John Lion / 25이 아닌 John / Lion으로 출력되는 이유이다. 이러한 문제를 해결하기 위해서는 std::getline()함수를 사용하면 된다.
std::getline()
std::getline(std::cin, std::string variable)로 이루어진다. 위의 코드의 std::cin을 std::getline()으로 바꾸면 오류가 해결되지만, 만일 cin과 getLine을 같이 사용하게 될 경우 또 다른 오류가 발생할 수 있다.
cin을 사용하면 숫자 값을 입력하면 cin은 숫자 값만 캡처할 뿐만 아니라 "\n"도 캡처한다. 그렇게 되면 cin은 실제로 "2\n" 문자열을 얻는다. 그런 다음 숫자 값 2를 추출해서 choice 변수에 할당한다. 그러면 getline() 함수가 이름을 읽으러 갈 때 스트림에 "\n"이 남아 있는 걸 보고 빈 문자열을 입력받았다고 생각하여 name 변수에 빈 문자열을 할당한다.
std::cin으로 숫자 값을 읽은 후 스트림에서 "\n"을 제거하는 것이 좋다.
std::cin.ignore(32767, '\n'); // ignore up to 32767 characters until a \n is removed
32767은 cin::ignore() 함수가 무시할 문자 수다. 이 숫자는 모든 플랫폼에서 2-byte 정수의 가장 큰 값이다.
기술적으로 무시하는 방법은
#include<limits>
//...
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
이지만 헤더파일도 추가해야하므로 실용적인 32767을 사용하는 것이 좋다.
이런식의 연산도 가능하다.
std::string a("452");
std::string b("23");
a += b;
cout << a << endl;
// 45223
string의 길이를 파악하는 방법은으로는 length()함수를 이용하는 방법이 있다.
std::string myStr("abcd");
cout << myStr.length() << endl;
// 4
length()함수는 <string>의 포함되어 있는 멤버 함수이다.
.
.
.
string 함수 정리 블로그 주소
'언어 > C++' 카테고리의 다른 글
8.5 위임 생성자 (0) | 2020.04.22 |
---|---|
8.4 생성자 멤버 초기화 목록 (0) | 2020.04.22 |
8.3 생성자 Constructors (0) | 2020.04.22 |
8.2 캡슐화, 접근 지정자, 접근 함수 (0) | 2020.04.22 |
[C++] std::array (0) | 2020.03.28 |
- Total
- Today
- Yesterday
- timecomplexity
- 파이썬
- 포인터
- 직접 지정
- 다차원 배열
- 재귀함수
- 공간복잡도
- 공부
- 1차원 배열
- 간접 지정
- inflearn
- C
- 공용체
- 회전리스트
- 3차원 배열
- codeit
- Algorithm
- 2차원 배열
- 구조체
- call by reference
- 형승격
- 배열
- 비트필드
- 자료구조
- 강의
- 알고리즘
- 프로그래밍
- call by value
- 시간복잡도
- 종류
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |