프로그래밍/C, C++

[C]백준 1152 단어의 개수 (gets)

pxatd 2020. 11. 30. 17:27
728x90

문제 

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

학습

앞에서 풀었던 백준 문자열 문제 처럼 문자열 선언 후 scanf("%s")로 받으려 했으나 실행시 자꾸 첫 단어만 입력되거나, 출력 결과로 0이 나오는 오류가 발생했다. 이에 대해 찾아보니 scanf() 함수는 여러 변수를 저장할 수 있는 대신, 공백 문자열은 저장하지 못한다고 한다. 그래서 공백까지 저장할 수 있는 함수인 gets를 새롭게 학습할 수 있었다. 

 

scanf와 gets의 차이

scanf = 공백을 저장할 수 없기 때문에 문자열을 입력받기에 적합하지 않다. 

 

gets = 줄바꿈 Enter을 입력하기 전까지는 한 줄 전체를 그대로 읽어들인다. (공백포함) 

간단하게 gets와 scanf를 비교 해 보았다. 

 

 

코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	char str[1000001] = { 0 };
	int i, cnt = 0;

	gets(str);

	for (i = 0; i < strlen(str); i++)
	{
		if (str[i] != ' ')
		{
			if (i > 0 && str[i - 1] != ' ')
				continue;
			else cnt++;
		}
	}
	printf("%d\n", cnt);
}

 

문제출처
 https://www.acmicpc.net/problem/1152
728x90