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
'프로그래밍 > C, C++' 카테고리의 다른 글
[C] 백준 2839번 설탕배달 🧁 (0) | 2021.01.30 |
---|---|
[C]백준 1712 손익분기점 (0) | 2021.01.18 |
[C]백준 5622 다이얼 (문자열) (0) | 2021.01.10 |
[C]백준 4673 셀프넘버 (bool) (0) | 2020.11.02 |
[C++] 알파벳 개수 세기 (tolower, toupper) (0) | 2020.08.13 |