2-16
영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ';' 문자로 한다.
cin.getline(buf, 10000, ';');를 이용하여 텍스트를 키보드로부터 읽으면 된다. 문자를 소문자로 바꿀 때 tolower(char c) 함수를 이용하고, 알파벳인지 검사하기 위해 isalpha(char c)함수를 이용하라. 텍스트 입력을 쉽게 하려면, 입력할 텍스트를 메모장에 입력한 후 ctrl-c로 복사하고, DOS 실행 창에 마우스 오른쪽 버튼을 누르고 붙여 넣기 메뉴를 선택하면 된다.
#include <iostream>
#include <string>
#define _CRT_SECURE_NO_WORNINGS
using namespace std;
int main() {
char text[10000];
int al[26] = { 0 };
int total = 0;
cin.getline(text,10000,';');
for (int j = 0; j < strlen(text); j++) {
if (isalpha(text[j])) {
if (text[j] < 91) {
text[j] = tolower(text[j]);
}
total++;
al[text[j] - 97]++;
}
}
cout << total<<endl;
for (int i = 0; i < 26; i++) {
cout << (char)('a' + i) << "(" << al[i] << ")" << " :";
for (int j = 0; j < al[i]; j++) {
cout << "*";
}
cout << endl;
}
}
텍스트의 문장이 알파벳인지를 확인하기 위해서 isalpha(text)로 확인한다. 그 후 텍스트의 대문자를 소문자로 바꾸기 위해서 tolower(text)를 이용해서 대문자를 소문자로 바꿔준다.
알파벳의 개수는 26개로 al[26]={0};을 선언해준다.
al[text[j]-97]++;는 만약 j에 들어있는 값이 a라면 아스키코드의 a의 십진수 값은 97이다. 즉, al[97-97]는 al[0]이므로 al[0]에 있는 값에 1증가시켜준다.