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 |