#31. [백준_C언어] 1152 : 단어의 개수

 

 입력 코드 

#include <stdio.h>
#include <string.h>
#include <ctype.h>

main() {
	char s[1000000];
	int i, len;
	int num = 0, space = 0;

	gets(s);
	len = strlen(s);

	for (i = 0; i < len; i++) {
		if (s[i] == ' ')
			space++;
	}

	num = space + 1;

	if (len == space) {
		num = 0;
		printf("%d", num);
	}
	else {
		if (isspace(s[0]))
			num--;
		if (isspace(s[len - 1]))
			num--;
		printf("%d", num);
	}
}

 

 코드 설명 

#배열 #공백 #조건문 #논리연산자 #fgets #isspace

#include <stdio.h>
#include <string.h>

main() {
	char s[1000000];
	int i;
	scanf("%s", s);

	int count = 0;
	for (i = 0; i < strlen(s); i++) {
		if (s[i] == " ") {
			if (i == 0 | i == strlen(s))
				count = count;
			else
				count++;
		}
	}

	printf("%d\n", count);
}

처음에는 문자 앞뒤의 공백을 i=0 이거나 i==strlen(s)으로 작성했는데 제대로 결과가 안 나왔다.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

main() {
	char s[1000000];
	int i, len;
	int num = 0, space = 0;

	gets(s);
	len = strlen(s);

	for (i = 0; i < len; i++) {
		if (s[i] == ' ')
			space++;
	}

	num = space + 1;

	if (len == space) {
		num = 0;
		printf("%d", num);
	}
	else {
		if (isspace(s[0]))
			num--;
		if (isspace(s[len - 1]))
			num--;
		printf("%d", num);
	}
}

그래서 다른 풀이를 참고해서 gets, isspace를 이용해서 다시 작성했다.

여러 자료들을 찾아봤지만 사실 아직도 이 두 함수의 사용법을 정확하게 모르겠다.


 whitespace를 판별해주는 함수 isspace 

 

※ whitespace에 해당하는 문자

문자
' ' 스페이스, 공백
'\n' 라인피드
'\t' 수평 탭
'\v' 수직 탭
'\f' 폼 피드
'\r' 캐리지리턴

▶헤더파일 : #include <ctype.h>

isspace 외에도 isalpha, isdigit, isalnum 등의 판별 함수들이 있음

 

함수 프로토타입 : int isspace (int c);

int c : 판별할 문자

 

리턴값 : whitespace에 해당하면 0이 아닌 값을 리턴하고, whitespace가 아니면 0을 리턴

 


 입력함수 gets 

 

▶헤더파일 : #include <stdio.h>

 

함수 프로토타입 : gets(str);

str : 입력할 문자형 배열

 

※ 문자열만 입력받을 수 있고, 개행을 기준으로 입력받는다.

문자열을 입력받아 함수의 인자로 명시한 주소의 메모리에 저장한 뒤 입출력 버퍼가 비어있는지 확인하고 비어있다면 문자 혹은 문자열을 입력받아 입출력 버퍼에 저장한다.

 

 

참고  

egloos.zum.com/lechocolat/v/441439

 

[C언어]입력함수 gets, scanf, fgets 비교

Reference: 그림으로 배우는 Easy C언어(영진닷컴, Mana Takahashi저, 2011) Reference: Head First C(한빛미디어, David Griffiths and Dawn Griffiths저, 2012) 입력 함수를 알아보겠습니다. 1. Scanf() - ( ) 안에 여러가지 format

egloos.zum.com


참고한 사이트

jhnyang.tistory.com/117

 

[백준 Baekjoon알고리즘]1152번 단어의 개수 문제 풀이, 공백 문자열 자르기, 다양한 풀이법

백준(BAEKJOON) 알고리즘 문제 풀기 - 1차원 배열 사용하기 [1152] 단어의 개수 ---------------------------------------------------------------------------------------- 문제: 영어 대소문자와 띄어쓰기만..

jhnyang.tistory.com

jhnyang.tistory.com/228

 

[C언어][ctype.h][isspace] 공백,탭,개행 등을 검사해주는 isspace 함수 (whitespace 판별), 공백제거하기

안녕하세요~ C언어 함수 관련 포스팅은 오랜만이군요 ㅎㅎ 그동안 바빠서 블로그 관리를 하지 못했다가 최근들어 차츰차츰 해보려고 해요. 오늘은 그 많고 많은 함수 중 isspace해 작성해보려고

jhnyang.tistory.com

m.blog.naver.com/tipsware/221286903892

 

[Quiz] 문자열에서 공백 문자 제거하기

: C 언어 관련 전체 목차http://blog.naver.com/tipsware/221010831969​1. 문제아래의 예제에서 비어있는...

blog.naver.com

 

 

 

 

 문제 출처 

www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

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

www.acmicpc.net