1. 문제
히스토그램 클래스에 <<, ! 연산자 작성
히스토그램을 표현하는 Histogram 클래스를 만들고 <<, ! 연산자를 작성해보자. Histogram 클래스는 영문자 알파벳만 다루며 대문자는 모두 소문자로 변환하여 처리한다. Histogram 클래스를 활용하는 코드 사례는 다음과 같다.
2. 결과
3. 코드
#include <iostream>
#include <string>
using namespace std;
class Histogram {
string his;
public :
Histogram(string s) { his = s; }
Histogram& operator << (string s) {
this->his += s;
return *this;
}
Histogram& operator << (char s) {
this->his += s;
return *this;
}
void operator !() {
int i, count=0;
int anum[26];
for(i=0;i<26;i++) anum[i]=0;
cout << his << endl << endl;
for(i=0; i< his.size(); i++) {
if( isalpha( his.at(i) ) )
{
int c = tolower( his.at(i) );
anum[ c-97 ]++;
count++;
}
}
cout << "총 알파벳 수 " << count << endl;
for(i=0; i<26; i++) {
cout << (char)(i+97) << ":";
for(int k=0; k< anum[i]; k++) cout << "*";
cout << endl;
}
}
};
int main() {
Histogram song("Wise men say, \nonly fools rush in But I can't help, \n");
song << "falling" << " in love with you." << "- by ";
song << 'k' << 'i' << 't';
!song;
}
4. 설명
Histogram 클래스에서 string변수를 매개변수로 가지는 생성자 하나를 생성합니다.
또한, 구현해야 하는 연산자 함수는 string 변수를 입력받는 "<<" 와 char형 변수를 입력 받는 "<<", 그리고 히스토그램을 그리는 "!" 로 3개 입니다.
"<<" 연산자 함수는 단지 클래스 멤버 변수의 "+=" 연산자를 사용하여서 문자열을 연결시켜주면 됩니다. 연결을 시켜준 후 자신을 가리키는 *this를 리턴해줍니다.
-> 단, 여기서 주의하실 점은 main에서 << 연산자를 사용하여서 값들을 연속으로 입력 받을 수 있도록 하고자 하면 리턴형을 Histogram& 으로 해주셔야 합니다.
"!" 연산자 함수는 히스토그램을 그리는 기능을 하며 우선 각 알파벳들의 개수를 저장할 함수 anum을 선언합니다. 그 후 알파벳인지 검사를 합니다. 그 다음 대문자일 수도 있으니 tolower() 함수를 이용하여서 소문자로 고쳐줍니다.
총 알파벳 수를 구했으면 이제 히스토그램을 그립니다.
-> (char)(i+97) 를 for문을 이용하여서 출력하면 a~z를 간편하게 출력할 수 있습니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 8장 2번 (0) | 2019.04.22 |
---|---|
명품 C++ programming 실습문제 8장 1번 (0) | 2019.04.21 |
명품 C++ programming 실습문제 7장 9번, 10번 (0) | 2019.04.17 |
명품 C++ programming 실습문제 7장 7번, 8번 (0) | 2019.04.17 |
명품 C++ programming 실습문제 7장 6번 (0) | 2019.04.17 |