[명품 C++ 프로그래밍] 실습문제 2장 16번

밀크야살빼자·2023년 4월 16일
0

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증가시켜준다.

profile
기록기록기록기록기록

0개의 댓글