반응형
4.10> 영문자로 구성된 텍스트에 대해 각 알파벳에 해당하는 문자가 몇 개인지 출력하는 히스토그램 클래스 Histogram을 만들어보자. 대문자는 모두 소문자로 변환하여 처리한다. Histogram 클래스를 활용하는 사례와 실행 결과는 다음과 같다.
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 32 33 34 35 36 37 38 39 40 41 | #include <iostream> #include <algorithm> //transform 함수 사용 위함 #include <string> using namespace std; class Histogram{ private: string s; //스트링 저장용 public: Histogram(string s){(this->s)+=s;} //생성자는 멤버스트링 s에 매개스트링 s를 더한다. void put(string s){(this->s)+=s;} //멤버스트링 s에 매개스트링 s를 더한다. void putc(char c){(this->s)=s+c;} //멤버스트링 s에 매개 캐릭터 c를 더한다. void print(){ cout<<s<<endl; //소문자화 하기전 출력 transform(s.begin(),s.end(),s.begin(),tolower); //스트링 s를 전부 소문자화 시킴 cout<<s<<endl; //소문자화 한 후 출력 for(int i=0;i<26;i++){ //알파벳이 26자라서 26번 돌린다. int count=0; //알파벳 몇번 나왔나 셀 때 사용할 변수 for(int k=0;k<s.size();k++){ //스트링 전부 순회 if(s[k]==(i+97)) //아스키코드 97이 'a'라서 97~97+26 은 'a'~'z'를 의미한다. s의 각 문자를 'a'~'z'와 비교 count++; //만약 s[k]가 i+97과 같으면 count 증가 } cout<<(char)(i+97)<<" ("<<count<<") : "; //출력 for(int j=0;j<count;j++) //count 수만큼 별 출력 {cout<<"*";} cout<<endl; //한줄 내린다. } } }; int main(void){ 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(); return 0; } | cs |
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
변수와 포인터와 참조 (0) | 2017.11.08 |
---|---|
float와 double (0) | 2017.11.05 |
Circle, CircleManager 클래스 (0) | 2017.11.03 |
Person, Family 클래스 (0) | 2017.11.03 |
원의 개수와 반지름 (0) | 2017.11.03 |