«   2024/12   »
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 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

[c++] 영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 블라블라 본문

프로그래밍/c++ 명품프로그래밍

[c++] 영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 블라블라

ITGenerations 2017. 11. 14. 21:56

영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라. 대문자는 모두 소문자로 집계하며, 텍스트 입력의 끝은 ';' 문자로 한다.



[코드는 다른 분이 작성한 걸 긁어 왔고, 주석추가와 간단한 마무리만 했습니다.]

http://blog.naver.com/hann0621/30187052881

코드 주인


#include<iostream>

using namespace std;


#define ALPHA_NO 26

#define MAX_LENGTH 10000


int main() 

{


//변수 선언

char text[MAX_LENGTH];

int histo[ALPHA_NO] = { 0 };

int i = 0;

int a = 0;

int sum = 0;


cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다." << endl

<< "텍스트의 끝은 ; 입니다. 10000개까지 가능합니다." << endl;


//아래는 테스트 할 문장들

//Wise men say, only fools rush in

//But I can't help, falling in love with you

//Shall I stay? Would it be a sin?

//If I can't help, falling in love with you

//Like a river flows, surely to the sea

//Dearling so it goes, some things aren't meant to be;


//전체 문장 입력, ';'로 입력 종료

cin.getline(text, MAX_LENGTH, ';'); 



//전체 문자열 길이 측정

int len = strlen(text);


//전체 문자열 크기 만큼 대소문자 확인과 알파벳인지 검사

for (i = 0; i < len; i++)

{

if (isalpha(text[i])) { //알파벳인지 검사 //텍스트의 현재 값 i가 넘어감

char c = tolower(text[i]); //문자를 소문자로 전환 //대문자 전환은 upper 

histo[c - 'a']++; //소문자 기준으로 되어 있으니 'a', 문자열 카운트

}

}



// 전체 문자열 수 확인.

for (a = 0; a<ALPHA_NO; a++)

{

sum += histo[a]; //전체 입력 히스토 합산

}


cout << "총 알파벳 수 " << sum << endl; //출력





for (i = 0; i<ALPHA_NO; i++) 

{

cout.put('a' + i);

cout << " (" << histo[i] << ") : ";

for (a = 0; a<histo[i]; a++)

cout << "*";

cout << endl;


}


return 0;

}