<set> 실습이다. 더이상의 설명은 생략한다.
#include <iostream> #include <string> #include <sstream> #include <vector> #include <set> using namespace std; void main(void) { bool flag = true; set<string> data; while(flag) { string tstr; cout << ">> "; ::getline(cin, tstr); // command string buf; stringstream ss(tstr); vector<string> tokens; // tokens 에 나눠 담기. " "을 구분자로 한다. while ( ss >> buf ) tokens.push_back(buf); // 나눈 토큰의 양이 0보다 작으면 다시 입력을 받는다. if ( tokens.size() <= 0 ) continue; // 토큰 커맨드 명령어가 한줄이상일때. if ( tokens[0].length() >= 0 ) { char* cmd = new char[tokens[0].length()]; strcpy(cmd , tokens[0].c_str()); if ( strcmp( cmd, "add") == 0 ) // add일 경우. { string b; for( unsigned int i = 1; i < tokens.size(); i++) { b += tokens[i]; if ( tokens.size() -1 != i ) b += " "; } data.insert(b); } else if ( strcmp( cmd, "print") == 0 ) { set<string> ::iterator it; for ( it = data.begin(); it != data.end(); it ++) { cout << *it << endl; } } else if ( strcmp ( cmd, "del") == 0 ) { set<string> ::iterator it; string f; for( unsigned int i = 1; i < tokens.size(); i++) { // 문자열을 토큰으로 나누다보니. // 문자사이의 공백을 무시해서 공백 추가. f += tokens[i]; if ( tokens.size() -1 != i ) f += " "; } // set에서 erase(데이터)를 하면, // 해당 데이터를 알아서 찾아서 지운다. data.erase(f); /* //// 이것도 동작은 한다. //// it = data.find(f); if ( it != data.end() ) { data.erase(it); } */ } else if ( strcmp ( cmd, "end" ) == 0 ) { flag = false; } else if ( strcmp ( cmd, "/?") == 0 || strcmp ( cmd, "help") == 0 ) { cout << "add {string} = 문자열 저장" << endl; cout << "del {string} = 저장된 문자열 삭제" << endl; cout << "print = 데이터 출력" << endl; cout << "end = 프로그램 종료" << endl; } } } }
'C++ in Windows > STL' 카테고리의 다른 글
set 실습 2 (0) | 2012.07.09 |
---|---|
vector 실습 (0) | 2012.07.04 |