1. 문제
10. 영문자로 구성된 텍스트에 대해 각 알파벳에 해당하는 문자가 몇 개인지 출력하는 히스토그램 클래스 Histogram을 만들어보자. 대문자는 모두 소문자로 변환하여 처리한다.
Histogram 클래스를 활용하는 사례와 실행 결과는 다음과 같다.
2. 결과
3. 코드
#include <iostream>
#include <string>
using namespace std;
class Histogram {
string his;
int len;
int count[26];
public :
Histogram(string h) {
his = h+"\n"; len = 0;
for(int i=0; i < h.size(); i++)
if( isalpha( his.at(i)) ) len++;
for(int i=0; i < 26; i++)
count[i] = 0;
}
void put(string h);
void putc(char h);
void print();
};
void Histogram::put(string h) {
this->his += h;
for(int i=0; i < h.size(); i++)
if( isalpha( h.at(i)) ) len++;
}
void Histogram::putc( char h) {
this->his += h;
if( isalpha(h) ) len++;
}
void Histogram::print() {
cout << his << endl << endl << "총 알파벳 수 " << len << endl << endl;
char temp;
for(int i=0; i < his.size(); i++) {
if( isalpha( his.at(i) ) ) {
temp = tolower( his.at(i) );
count[temp-97]++;
}
}
for(int i=0; i<26; i++) {
printf("%c (%d)\t: ", 97+i, count[i]);
for(int j=0; j < count[i]; j++)
cout << "*";
cout << endl;
}
}
int main() {
Histogram elvisHisto("Wise men say, only fools rush in But I Can't help, ");
elvisHisto.put("falling in love with you");
elvisHisto.putc('-');
elvisHisto.put("Elvis Presley");
elvisHisto.print();
}
4. 설명
생성해야할 함수들은
Histogram(string s) : 문자열 s + "\n"를 하여서 멤버변수에 저장합니다. 또한 입력받은 알파벳의 개수를 구한다음 각 알파벳 개수를 저장할 배열 count의 모든 원소를 0으로 초기화 해줍니다.
void put( string s); : 저장된 문자열 뒤에 문자열 s를 추가합니다.
void put( char h); : 저장된 문자열 뒤에 문자 h를 추가합니다.
void print() : 저장된 문자열의 총 알파벳 수를 출력하고 각 알파벳의 개수를 표현하는 히스토그램을 출력합니다.
알파벳의 개수를 구해야 하므로 isalpha()를 사용하여서 알파벳인 경우 개수를 증가시켜야 합니다.
print()함수에서 알파벳을 출력하실 때 printf("%c (%d)\t: ", 97+i, count[i] ); 로 간단히 for문을 이용하여서 출력할 수 있습니다.
또한 달리 cout << (char)(i+97) << "(" << count[i] << ")\t: "; 를 사용 하셔도 됩니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 4장 Open Challenge (0) | 2019.04.07 |
---|---|
명품 C++ programming 실습문제 4장 11번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 9번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 8번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 4장 7번 (0) | 2019.04.06 |