-
개념
문자열에서 작동하는 스트림 클래스 입니다. (헤더파일로 <sstream> 을 선언해주어야 합니다.)
이 클래스 객체는 일련의 문자를 포함하는 문자열 버퍼를 사용하고 있습니다.
문자열에서 내가 원하는 자료형의 데이터를 추출할 때 사용합니다.
간단하게 보는 사용 방법
string str = "mis's birthday 0611"; stringstream ss(str);
위와 같이 문자열을 stringstream 스트링스트림이름(문자열이름) 으로 선언하면 됩니다.
스트링스트림이름 = ss 문자열이름 = str
으로 선언된 상태입니다.
int num; while (ss >> num) cout << num << endl;
자료형을 int 로 선언한 num 으로 ss 을 실행 해보겠습니다.
230907 이라는 값이 나왔습니다. 문자열의 뒤에도 0611 이라는 숫자 값이 있지만,
ss 는 사용자가 지정한 자료형인 int 가 아닌 값을 만나자 종료가 됐습니다.
그렇다면, 자료형을 char 로 선언하여 숫자도 문자의 개념으로 받게 된다면 어떤 결과가 출력될까요.
공백을 제외한 모든 값이 하나씩 출력된 모습이네요.
공백을 넣고자 하신다면, cout 문에서 공백을 추가하시면 됩니다.
Stringstream 을 통해 문자열이 정수로만 이루어졌는지 판단하기.
[C++] string 문법 응용 실습 : 입력받은 문자열이 정수로만 이루어져 있는지 판단하기. :: 주름없는 돌덩이 (tistory.com)
해당 글의 실습을 stringstream 을 응용하여 풀이 방법을 작성했습니다.
char ch1, ch2; while (ss >> ch1) { if (ch1 >= 'A' && ch1 <= 'z') { result1 = 1; //cout << "첫 번째 문자열은 숫자로만 이루어져 있지 않아요. \n"; } } while (ss2 >> ch2) { if (ch2 >= 'A' && ch2 <= 'z') { result2 = 1; //cout << "두 번째 문자열 숫자로만 이루어져 있지 않아요. \n"; } }
* 사용자에게 문자열을 두 개 입력받았습니다.
stream 을 통해 확인할 때, 그 값은 문자형 이기에 아스키코드를 통해서 한 문자마다
그것의 아스키 코드 값이 영문자의 범위 안에 있는지 판단해서, 영문자의 범위에 있다면
그 문자는 영문자로 판단하고 이를 if문의 조건 요소로 사용할 변수에 값을 임의로 지정했습니다.
if (result1 == 0 && result2 == 0) { cout << "\n 두 문자열 숫자로만 이루어져 있네요. \n"; break; }
그 후, 만약 모든 문자열을 검사해서 숫자로만 이루어저, result1, 2의 값이 1로
바뀌지 않고 둘 다 0 이라면, 두 문자열이 모두 숫자라고 판단합니다.
✨ 참고 래퍼런스 :
(1) cplusplus.com/reference/sstream/stringstream/
🎉해당 글의 내용은 "포스코 x 코딩온 스마트 팩토리 과정 수업" 에서의 수업 자료 및 실습 과제 등에서 일부 발췌되어 작성 되었습니다.
'개발 > C++' 카테고리의 다른 글
[C++] 하나의 파일을 이용하여 다른 한 개의 파일에 추가적인 입력과 수정하기 (0) 2023.09.11 [C++] 파일을 읽고 내용을 배열에 저장하여 새로운 파일에 저장하기 (0) 2023.09.08 [C++] string 문법 응용 실습 : 입력받은 문자열이 정수로만 이루어져 있는지 판단하기. (0) 2023.09.06 [C++] string 함수 실습. (size(), length(), find()) (0) 2023.09.06 [C++] list 의 기본 문법과 반복문, list에만 존재하는 함수 실습 (0) 2023.09.05 댓글 (비로그인 댓글 허용하지 않습니다.)