728x90
단어의 개수 성공분류
시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초 | 128 MB | 131449 | 35024 | 26907 | 27.212% |
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력 1 복사
The Curious Case of Benjamin Button
예제 출력 1 복사
6
예제 입력 2 복사
Mazatneunde Wae Teullyeoyo
예제 출력 2 복사
3
예제 입력 3 복사
Teullinika Teullyeotzi
예제 출력 3 복사
2
소스
#include<stdio.h>
#include<string.h>
int main() //공백 아스키코드 32
{
char str[1000000]; //%s 사용하면 띄어쓰기 하면 거기까지 밖에 저장안됨 ex)abc def 하면 abc까지 저장됨
scanf("%[^\n]", str, 10000); //대신 %[^\n] 사용하면 엔터를 제외한 모든 수를 저장함
char blank = 32; //공백 ASCII코드 10진수 32
int len = strlen(str); // 입력한 문자열 수 저장
int i, count = 0; //i=for문 변수 count=단어 갯수 ;
for (i = 0; i < len; i++) //문자열 길이만큼 반복
{
if (str[i] == blank && str[i - 1] >= blank) //만약 문자열 실행중 공백일 때 공백 전값에 단어가 있을 때 실행
{ //&& 전 값이 소문자나 대문자가 나왔다면
count++;
}
}
if (count > 0 && str[len - 1] != blank) count++; //맨 마지막 단어는 포함 안되서 넣어준거임
if (count == 0)
{
for (i = 0; i < len; i++)
{
if (str[i] != blank && str[i]) //단어가 하나만 있을 때
{
count = 1;
}
}
}
printf("%d", count);
}
'백준 코딩테스트 > 6. 문자열' 카테고리의 다른 글
5622) 다이얼 (c) (0) | 2020.09.30 |
---|---|
2908) 상수 (c) (0) | 2020.09.30 |
1157) 단어 공부 (c) (0) | 2020.09.30 |
2675) 문자열 반복 (c) (0) | 2020.09.30 |
10809) 알파벳 찾기 (c) (0) | 2020.09.30 |