ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 7장 Open Challenge
    C++ 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

    댓글

© 2018 TISTORY. All rights reserved.