프로그래밍/C, C++
[C]백준 1152 단어의 개수 (gets)
pxatd
2020. 11. 30. 17:27
728x90
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
학습
앞에서 풀었던 백준 문자열 문제 처럼 문자열 선언 후 scanf("%s")로 받으려 했으나 실행시 자꾸 첫 단어만 입력되거나, 출력 결과로 0이 나오는 오류가 발생했다. 이에 대해 찾아보니 scanf() 함수는 여러 변수를 저장할 수 있는 대신, 공백 문자열은 저장하지 못한다고 한다. 그래서 공백까지 저장할 수 있는 함수인 gets를 새롭게 학습할 수 있었다.
scanf와 gets의 차이
scanf = 공백을 저장할 수 없기 때문에 문자열을 입력받기에 적합하지 않다.
gets = 줄바꿈 Enter을 입력하기 전까지는 한 줄 전체를 그대로 읽어들인다. (공백포함)
코드
#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