-
명품 C++ 7장 Open ChallengeC++ 2018. 11. 3. 16:05
히스토그램 클래스에 <<, ! 연산자 작성
히스토그램을 표현하는 Histogram 클래스를 만들고<<, ! 연산자를 작성해보자. Histogram 클래스는 영문자 알파벳만 다루며 대문자는 모두 소문자로 변환하여 처리한다.
소스코드
#include <iostream>#include <string>using namespace std;class Histogram {string text;public:Histogram(string text) { this->text = text; }Histogram& operator<<(string text);Histogram& operator<<(char c);void operator!();};Histogram& Histogram::operator<<(string text) {this->text += text;return *this;}Histogram& Histogram::operator<<(char c) {this->text += c;return *this;}void Histogram::operator!() {int alpha[26] = { 0 };int count=0;char c;for (int i = 0; i < text.size(); ++i) {c = text[i];if (isalpha(c) != 0) { // c 가 알파벳이라면c = tolower(text[i]); // 문자 text[i]를 소문자로 변환하여 리턴.alpha[(int)c - 97]++;++count;}}cout << text << endl<< endl;cout << "총 알파벳 수 " << count << endl;for (int i = 0; i < 26; ++i) {cout << (char)(i + 97) << ":";for (int j = 0; j < alpha[i]; ++j)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; // 히스토그램 그리기}실행결과
<< 연속적으로 사용하기 위해서는 <<연산자의 리턴타입이 참조로 리턴되면 됩니다.
문자열은 string 사용하는 것이 더 편리합니다.
'C++' 카테고리의 다른 글
명품 C++ 8장 3번 4번 (0) 2018.11.04 명품 C++ 8장 1번 2번 (0) 2018.11.04 명품 C++ 7장 12번 (0) 2018.11.03 명품 C++ 7장 11번 (0) 2018.11.03 명품 C++ 7장 10번 (0) 2018.11.03