728x90
입력을 읽고 카운트한 단어의 수를 보고하는 프로그램을 만들려고 한다. 이때, 문자 수, 라인 수, 그리고 단어 수를 카운트 할 수 있어야 한다.
1. 입력과 프로그램의 종료는 어떻게 다룰 것인가?
a. 입력: getchar()함수를 이용
b. 프로그램의 종료: 약속된 특정한 문자를 입력할 시, 프로그램이 종료되도록 함
2. 문자 수, 라인수, 단어 계산하는 방법
a. 문자 수 계산: 매 루프 사이클 마다 카운터를 증가시킴
b. 라인 수 계산: 만약 입력이 개행문자이면, 라인 카운트를 증가시킴
c. 단어 계산
- 문제를 단순히 하기 위해, 화이트 스페이스가 포함되어있지 않은 문자들의 한 시퀀스를 단어로 정의
- 단어는 화이트 스페이스가 아닌 문자에서부터 다음 화이트 스페이스 문자까지이다.
- 플래그를 0 또는 1로 지정하여, 어떤 문자가 여전히 한 단어에 속하는지를 추적한다.
(화이트스페이스를 만날 때, inword = 0로 지정하여 새로운 단어가 시작하는지를 추적)
- 문자가 화이트 스페이스인지 아닌지에 대한 검사는 ctype.h의 isspace()를 이용함
3. 코드
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#define STOP '|'
int main(void){
char c; // 현재 읽은 문자
char prevl; // 바로 전에 읽은 문자
long n_chars = 0L; // 문자 수
int n_lines = 0; // 라인 수
int n_words = 0; // 단어 수
int p_lines = 0; // 불완전 라인 수
bool inword = false; // c가 여전히 한 단어에 속해 있으면 true
printf("분석할 영문 텍스트를 입력하시오(끝내려면 |):\n");
prev = '\n'; // 라인을 식별하는데 사용함
while((c = getchar()) != STOP){
n_char ++; // 문자를 카운트 함
if (c = '\n') n_lines ++; // 라인을 카운트 함
if (!isspace(c) && !inword){
inword = true; // 새 단어를 시작함
n_words ++; // 단어를 카운트 함
}
if (isspace(c) && inword) inword = false; //단어의 끝에 도달함
prev = c; // 문자의 값을 보관함
}
if (prev != '\n') p_lines = 1;
printf("문자 수: %ld, 단어 수 = %d, 라인 수 = %d, 불완전 라인 수 = %d\n",
n_chars, n_words, n_lines, p_lines);
}
728x90
'프로그래밍 언어 > C, C++ 다양한 예시들' 카테고리의 다른 글
[C/C++] 최소값 선택 (0) | 2022.03.23 |
---|---|
[C/C++] 두 수를 교환하는 함수 (0) | 2022.03.22 |
[C/C++] 대화식 입력의 예제 (0) | 2022.03.19 |
[C/C++] 메뉴 선택 방식 (0) | 2021.08.24 |
[CUDA] 데이터 복사 예제 (0) | 2021.08.20 |
댓글