안녕하세요 엘체프 입니다.

STL컨테이너의 요소로 변환 하여 교환해보는 실습으로 C++마무리 합니다.



문) 아래와 같이 비속어들과 그에 따른 교정어(바른 말)로 된 배열을 작성하고 이것을 STL 컨테이너의 요소로 변환하여

비속어 교정 사전을 만든 후, 특정 욕설 문장을 입력하였을 때 바로 교정하여 화면에 인쇄하는 프로그램입니다.


관련 예제 : 교과서 p.522 예제

 

   비속어 배열 요소들 : {"미친",     "뼉다귀",   "염병",  "것들",   "빡쳐", "졸라"};
   교정어 배열 요소들 : {"정신나간", "고집쟁이", "이런", "사람들", "화나", "정말"};


출력 예시)


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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <string>
#include <map>
 
using namespace std;
 
int main(void) {
 
     string trashArr[]   = {"미친",     "뼉다귀",   "염병",  "것들",  "빡쳐", "졸라"};
     string correctArr[] = {"정신나간", "고집쟁이", "이런", "사람들", "화나", "정말"};
 
     int sizeArr = sizeof(trashArr) / sizeof(string);
     map<string, string> slangDic;
 
     for (int i=0; i<sizeArr; i++) {
        slangDic.insert(make_pair(trashArr[i], correctArr[i]));
     } // for
 
     /*map<string, string>::reverse_iterator it
        = slangDic.rbegin();
 
     while (it != slangDic.rend()) {
      cout << it->first << ", " << it->second << endl;
      it++;
     } // while*/
 
     string slangSent = "이 미친 염병 뼉다귀 같은 것들 때문에 졸라 빡쳐!";
     string correctSent;
 
     // 비속어 문장(slangSent) 비속어 사전 -> 검색
     // 교정어 치환 -> 결과(correctSent) -> 인쇄
     // p.522/533
 
      map<string, string>::iterator it = slangDic.begin();
 
      size_t found;
 
      correctSent = slangSent; // 교정 문장 완성
 
       while (it != slangDic.end()) {
 
           found = correctSent.find((*it).first);
           
          while(found !=string::npos) {
 
            // 작성 시작 
          // 작성 힌트)
          // correctSent 문장 변수에서 found 변수(검색 단어 변수)
          // 를 it 반복자 패턴 변수의 값(second)로 교체(replace)하는
          // 한개의 문장을 작성합니다. p.523 중단의 replace 구문 참조
   
            

            // 작성 끝
            found = correctSent.find((*it).first, 
                                    found+1);
          } // while
 
          it++;
 
         } // while // 치환 완료
 
 
     cout << slangSent << endl;  // 교정전 문장
     cout << correctSent << endl; // 교정 후 문장
 
     system("PAUSE");
     return 0;
}


----------------------------------------------

답안소스

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <string>
#include <map>
 
using namespace std;
 
int main(void) {
 
     string trashArr[]   = {"미친",     "뼉다귀",   "염병",  "것들",  "빡쳐", "졸라"};
     string correctArr[] = {"정신나간", "고집쟁이", "이런", "사람들", "화나", "정말"};
 
     int sizeArr = sizeof(trashArr) / sizeof(string);
     map<string, string> slangDic;
 
     for (int i=0; i<sizeArr; i++) {
        slangDic.insert(make_pair(trashArr[i], correctArr[i]));
     } // for
 
     /*map<string, string>::reverse_iterator it
        = slangDic.rbegin();
 
     while (it != slangDic.rend()) {
      cout << it->first << ", " << it->second << endl;
      it++;
     } // while*/
 
     string slangSent = "이 미친 염병 뼉다귀 같은 것들 때문에 졸라 빡쳐!";
     string correctSent;
 
     // 비속어 문장(slangSent) 비속어 사전 -> 검색
     // 교정어 치환 -> 결과(correctSent) -> 인쇄
     // p.522/533
 
      map<string, string>::iterator it = slangDic.begin();
 
      size_t found;
 
      correctSent = slangSent; // 교정 문장 완성
 
       while (it != slangDic.end()) {
 
           found = correctSent.find((*it).first);
           
          while(found !=string::npos) {
 
            // 작성 시작 
            // 작성 힌트)
            // correctSent 문장 변수에서 found 변수(검색 단어 변수)
            // 를 it 반복자 패턴 변수의 값(second)로 교체(replace)하는
            // 한개의 문장을 작성합니다. p.523 중단의 replace 구문 참조
   
            correctSent.replace(found, 
                             (*it).first.length(), 
                             (*it).second);
            // 작성 끝
            found = correctSent.find((*it).first, 
                                    found+1);
          } // while
 
          it++;
 
         } // while // 치환 완료
 
 
     cout << slangSent << endl;  // 교정전 문장
     cout << correctSent << endl; // 교정 후 문장
 
     system("PAUSE");
     return 0;
}


'스터디 > C,C++' 카테고리의 다른 글

map 정렬 문제  (6) 2018.03.05
C++ map을 이용한 login 문제  (6) 2018.02.28
C 문자열(string) 분리  (6) 2018.02.28
C 문자열(string) 바꾸기  (6) 2018.02.28
마지막 C 시험문제 공백 사각찍기  (7) 2018.02.28

+ Recent posts