문제 :
영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ';' 문자로 한다.
목적 및 힌트 :
문자열 읽기, C++ 프로그램 종합 응용
입력 파일 :
입력할 텍스트 파일을 첨부하였습니다.
실행 결과 :
코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include<iostream>
#include<cstring>
using namespace std;
int main() {
int tot=0; // 총 알파벳 개수
int alpha[27]={0}; // 각각의 알파벳을 나타냄
char text[10000]; // text를 저장할 배열
cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다.\n텍스트의 끝은 ; 입니다. 10000개까지 가능합니다.\n";
cin.getline(text,10000,';'); // 최대 10,000개의 영문 텍스트를 ';'전까지 입력받는다
for (int i = 0; i<strlen(text); i++) { // text[0]부터 text의 끝까지
if (isalpha(text[i])) { // text[i]가 알파벳이면 참
if(text[i]<91) text[i] = tolower(text[i]); // text[i]가 대문자이면 소문자로 변경
tot++;
alpha[text[i] - 97]++; // 각각의 알파벳이 몇개인지 카운트
}
}
cout << "총 알파벳 수 " << tot << endl << endl;
for (int i = 0; i < 26; ++i) { // 알파벳의 소문자 총 개수는 26개 (a~z)
cout << (char)(i+'a') << "(" << alpha[i] << ")"; // a부터 z까지 출력 후 각 (알파벳의 개수) 출력
cout << "\t: "; // 포맷을 출력하기 위해 탭과 ":" 출력
for (int j = 1; j <= alpha[i]; j++) // 각 알파벳의 개수만큼 "*" 출력
cout << "*";
cout << endl;
}
}
|
설명 :
cin.getline(buf, 10000, ';'); 을 이용하여 텍스트를 키보드로부터 읽으면 됩니다.
문자를 소문자로 바꿀 때 tolower(char c) 함수를 이용하고, 알파벳인지 검사하기 위해 isalpha(char c) 함수를 이용하면 됩니다.
또한 텍스트 입력을 쉽게 하려면, 입력할 텍스트를 첨부하였으니 ctrl-c로 복사하고, DOS 실행창에 마우스 오른쪽 버튼을 누르고 붙여 넣기 메뉴를 선택하거나 오른쪽 버튼만 눌러도 붙여 넣기가 됩니다.
'C++ programming' 카테고리의 다른 글
명품 C++ programming 실습 문제 3장 2번 (2) | 2020.03.02 |
---|---|
명품 C++ programming 실습 문제 3장 1번 (1) | 2020.03.02 |
명품 C++ programming 실습 문제 2장 15번 (3) | 2020.02.28 |
명품 C++ programming 실습 문제 2장 14번 (3) | 2020.02.28 |
명품 C++ programming 실습 문제 2장 13번 (1) | 2020.02.28 |