[코딩테스트] 백준 1152 단어의 개수-C++

문제 풀이

  • C++에서는 문자열의 공백을 구분하기 어렵다. 문자열을 tokenize를 하는 경우를 이번 기회를 통해서 정리해보았다.
  • strtok, strtok_s가 가장 먼저 떠오른 함수이다. string.g 헤더에 포함되어있는데 막상이를 이용해서 돌려보면 "unsafe"하므로 이용하지 않도록하라는 오류가 난다.
  • 따라서 sstream의 istringstream을 이용하기로 한다.istringstream은 문자열을 parsing할때 이용한다.
  1. getline을 통하여 string의 입력을 line으로 받는다.
  2. istringstream ss(s) 를 통하여 문자열 s를 파싱 할 것으로 등록한다.
  3. 잘린 string을 담을 변수 parsed를 이용하여 ss>>parsed 하면 parse가 1번 진행된다.
  4. parse를 반복하기 위해 while문에 입력하였다.
  • 이번 경우는 공백을 이용하여 parse하였으나, 구분자가 있는 경우 다음과 같이 처리한다.
    ss를 이용하여 getline을 반복한다.
    getline에서 delimiter을 이용할 때, 작은 따옴표('')를 이용해야함을 주의하자.
    큰 따옴표는 문자열, 작은 따옴표는 문자를 의미한다.
#include <iostream>
#include <string>
#include <sstream>

using namespace std; 

int main() {

	string s; 
	getline(cin, s);
	istringstream ss(s);
	string parsed; 

	while (getline(ss,parsed,','))
	{
		cout <<parsed<< "\n";
	}
	return 0;
}

c++ 코드

#include<iostream>
#include <sstream> // istringstream 
#include <string>

using  namespace std; 

int main() {
	//string의 최대 길이 4294967294
	string s; 
	string parsed;
	getline(cin, s);

	istringstream ss(s);
	int count = 0; 

	while (ss >> parsed) {
		count++; 
	}

	cout << count;
	return 0;
}

좋은 웹페이지 즐겨찾기