본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어의 개수 (1152)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어의 개수 (1152)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어의 개수 (1152)


[ 문제 ]

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

[ 입력 ]

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

[ 출력 ]

첫째 줄에 단어의 개수를 출력한다.


[ 코드 ]

#include<iostream>
#include<string>
using namespace std;

int main() {
	string str; // 문자열 입력 변수
	getline(cin, str);
	
	// 만약 문자열이 비어있을 경우
	if (str.empty()) { 
		cout << "0";
		return 0;
	}

	// 공백 개수 count
	int count = 1;
	for (int i = 0; i < str.length() ; i++)
	{
		if (str[i] == ' ') // 만약 문자가 공백이라면
		{
			count++;
		}
	}

	// 문자열의 앞과 뒤에 공백이 있는 경우를 제외해주기
	if (str[0] == ' ')
	{
		count--;
	}
	if (str[str.length() - 1] == ' ')
	{
		count--;
	}

	// 문자열 개수 출력해주기
	cout << count << endl;
	return 0;

}

 


[ cin과 getline()에 대해서 ]

 

1. Cin 

- <iostream>에 포함되어 있음

- 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져옴

- 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들임

 

 

2. getline()

1) istream 라이브러리의 cin.getline()

istream & getline(char *s, streamsize n);
istream & getline(char *s, streamsize n, char delim);
// ex. cin.getline(str,100)

- 입력 시퀀스로부터 문자를 읽어들여 C 형식의 문자열로 s에 저장함.

 * s : C형식 문자열을 저장할 배열을 가리키는 포인터

 * n : 저장할 문자의 최대 개수 (끝의 종료 null 문자를 포함한 값)

 * delim : 제한자로, 이 문자에 도달시 추출이 중단됨 (이 문자는 s에 기록되지는 않지만, 스트림에서 사라지게 됨)

 

 

2) string 라이브러리의 getline()

getline(istream& is, string str);
getline(istream& is, string str, char dlim);
// ex.getline(cin,str)

- 최대 문자 수를 입력하지 않아도 되며, 원하는 구분자(delimiter)를 만날 때까지 모든 문자열을 입력 받아 하나의 string 객체에 저장함.

 

 

 ※ getline() 함수 사용시 주의점

int n;
string str;
cin>>n;
cin.ignore();
// ignore()을 해주지 않으면, n을 입력받은 후 문자열을 입력받지 않고 바로 다음 코드로 넘어가게 됨
// 버퍼에 정수값을 입력한 뒤 누른 엔터(\n)가 그대로 남아있어, getline에 들어가기 때문
getline(cin,str);

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)

 

반응형