프로그래밍 과제2번
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cout << "n 값: ";
cin >> n;
vector<int> isPrime;
for (int i = 0; i <= n; i++) {
isPrime.push_back(i);
}
for (auto it = isPrime.begin() + 2; it != isPrime.end(); ++it) {
int prime = *it;
if (prime != 0) {
for (int j = prime * prime; j <= n; j += prime) {
isPrime[j] = 0;
}
}
}
cout << "소수 목록:" << endl;
for (auto it = isPrime.begin() + 2; it != isPrime.end(); ++it) {
if (*it != 0) {
cout << *it << " ";
}
}
cout << endl;
return 0;
}
- 사용자는 n 값을 입력받습니다. 이 n 값은 우리가 구하고자 하는 소수의 범위(0부터 n까지)를 지정하는 값입니다.
- n 값에 따라 소수를 구하는 범위가 결정됩니다.
isPrime 벡터는 0부터 n까지의 모든 숫자를 포함하도록 초기화됩니다.
- isPrime[i]는 i가 소수인지 여부를 나타냅니다. 초기에는 모든 숫자를 소수로 가정하고, 나중에 소수가 아닌 숫자들을 0으로 만듭니다.
- 이 벡터의 인덱스가 해당 숫자를 나타내며, 소수가 아닌 숫자는 0으로 변경됩니다.
- isPrime.begin() + 2는 2부터 시작합니다. 왜냐하면 0과 1은 소수가 아니므로 소수 여부를 판별할 필요가 없습니다.
- 여기서 2부터 시작하여 소수를 찾습니다. 현재 숫자가 0이 아니라면, 그것은 소수라고 간주합니다.
- 에라토스테네스의 체 방식으로, 소수 prime의 배수들을 모두 0으로 만듭니다. 이때 prime * prime부터 시작하는 이유는 그 이전의 배수들은 이미 지워졌기 때문입니다.
이 코드는 에라토스테네스의 체를 사용하여 n까지의 소수를 구하는 방식입니다. 소수가 아닌 값들은 0으로 변경하고, 마지막에 0이 아닌 값들만 출력함으로써 소수 목록을 출력합니다.
프로그래밍 과제 1번
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
string a;
vector<string> arr;
while (1)
{
cin >> a;
if (a == "exit")
break;
auto it = find(arr.begin(), arr.end(), a);
if (it != arr.end())
arr.erase(it);
else
{
arr.push_back(a);
sort(arr.begin(), arr.end());
}
for (int i = 0; i < arr.size(); i++)
cout << arr[i] << " ";
cout << endl;
}
return 0;
}
입력 반복: 무한 루프를 통해 사용자가 문자열을 계속 입력받습니다. 입력된 문자열이 "exit"이면 반복이 종료됩니다.
중복 검사 및 제거:
- find() 함수를 사용하여 arr 벡터에서 입력된 문자열 a가 이미 존재하는지 찾습니다.
- arr에서 해당 문자열이 발견되면 (it != arr.end()), 해당 문자열을 벡터에서 제거합니다.
문자열 추가 및 정렬:
- 입력된 문자열이 arr에 존재하지 않으면, 해당 문자열을 arr에 추가하고, arr 벡터를 알파벳 순서로 정렬합니다.
- 현재 상태 출력:
- 벡터에 저장된 모든 문자열을 출력합니다.
- 문자열은 항상 알파벳 순서로 정렬된 상태에서 출력됩니다.
프로그램 흐름 요약:
- 문자열을 입력받습니다.
- 입력된 문자열이 "exit"이면 프로그램이 종료됩니다.
- 이미 존재하는 문자열이면 벡터에서 해당 문자열을 제거합니다.
- 새로운 문자열이면 벡터에 추가한 후 정렬합니다.
- 현재 벡터에 저장된 문자열들을 출력합니다.
자료구조 3번 과제
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
// 설명에서 길이 3 이상의 단어 추출
vector<string> extractWords(const string& desc) {
vector<string> words;
stringstream ss(desc);
string word;
while (ss >> word) {
if (word.length() >= 3) words.push_back(word);
}
return words;
}
int main() {
ifstream infile("shuffled_dict.txt");
string line, input;
cout << "단어를 입력하세요: ";
cin >> input;
while (getline(infile, line)) {
stringstream ss(line);
string word, def;
getline(ss, word, '\t');
getline(ss, def);
// 입력된 단어가 일치하면 출력
if (word == input) {
cout << word << ": " << def << endl;
vector<string> relatedWords = extractWords(def);
vector<string> printedWords = {word}; // 출력된 단어를 기록
// 관련된 단어들을 사전에서 검색
for (const auto& rWord : relatedWords) {
if (find(printedWords.begin(), printedWords.end(), rWord) == printedWords.end()) {
ifstream searchFile("shuffled_dict.txt");
string searchLine, searchDef;
while (getline(searchFile, searchLine)) {
stringstream searchSS(searchLine);
string searchWord;
getline(searchSS, searchWord, '\t');
getline(searchSS, searchDef);
if (rWord == searchWord) {
cout << searchWord << ": " << searchDef << endl;
printedWords.push_back(searchWord); // 출력한 단어 기록
break; // 단어를 찾았으면 더 이상 반복할 필요 없음
}
}
searchFile.close();
}
}
break; // 처음 입력된 단어를 찾았으니 루프 종료
}
}
infile.close();
return 0;
}
- 입력된 설명(desc)에서 길이가 3 이상인 단어를 추출하여 벡터에 저장합니다.
- stringstream을 사용해 설명을 단어별로 나누고, 길이가 3 이상인 단어만 벡터 words에 추가합니다.
- shuffled_dict.txt 파일을 입력 파일 스트림(ifstream)으로 엽니다. 이 파일은 단어와 그에 해당하는 설명이 탭으로 구분되어 있는 형식으로 저장되어 있다고 가정합니다.
- 사용자가 찾고자 하는 단어를 입력받습니다.
파일에서 한 줄씩 읽어들이고, 단어와 그에 해당하는 설명을 추출합니다.
- getline(ss, word, '\t'): 탭(\t) 문자를 기준으로 단어를 추출합니다.
- getline(ss, def): 설명 부분을 추출합니다.
관련 단어들을 다시 검색:
- relatedWords 벡터에서 길이가 3 이상인 단어들을 하나씩 검색합니다.
- find(printedWords.begin(), printedWords.end(), rWord) == printedWords.end()는 이미 출력된 단어인지 확인합니다. 출력되지 않았다면 다시 shuffled_dict.txt 파일에서 검색하여 설명을 출력합니다.
- 찾은 단어는 printedWords에 추가하여 중복 출력을 방지합니다
프로그램 흐름
- 사용자가 단어를 입력합니다.
- 프로그램은 파일을 한 줄씩 읽고, 사용자가 입력한 단어와 일치하는 단어를 찾습니다.
- 찾은 단어와 그 설명을 출력합니다.
- 설명에서 길이가 3 이상인 단어들을 추출하여, 해당 단어들도 사전에서 찾아 설명을 출력합니다.
- 단어가 출력되었으면 루프를 종료하고 프로그램을 마칩니다.
자료구조 4번 과제
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cctype>
#include <cassert>
using namespace std;
struct Person {
string name, address;
string phone, email, web;
};
vector<Person> directory;
vector<string> split_line(string& line, char delimiter) {
vector<string> tokens;
stringstream sstream(line);
string str;
while (getline(sstream, str, delimiter))
tokens.push_back(str);
return tokens;
}
string trim(string str) {
int s = 0, t = str.length() - 1;;
while (s < str.length() && isspace(str[s]))
s++;
while (t >= 0 && isspace(str[t]))
t--;
if (s <= t)
return str.substr(s, t - s + 1);
else
return "";
}
void load_data(string file_name) {
string line;
ifstream infile(file_name);
while (getline(infile, line)) {
vector<string> tokens = split_line(line, '\t');
assert(tokens.size() >= 4 && tokens.size() <= 5);
Person p;
p.name = tokens.at(0);
p.address = tokens.at(1);
p.phone = tokens.at(2);
p.email = tokens.at(3);
if (tokens.size() == 5)
p.web = tokens.at(4);
directory.push_back(p);
}
infile.close();
}
void print_person(Person& p) {
cout << p.name << ":" << endl;
cout << " Address : " << p.address << ":" << endl;
cout << " Phone : " << p.phone << ":" << endl;
cout << " Email : " << p.email << ":" << endl;
cout << " Web : " << p.web << ":" << endl;
}
void list_directory() {
for (auto& person : directory) {
print_person(person);
}
}
void search_directory(string& prefix) {
stringstream ss(prefix);
string condition;
vector<string> conditions;
// 검색어를 & 기준으로 분리하고
while (getline(ss, condition, '&')) {
conditions.push_back(trim(condition));
}
for (auto& p : directory) {
bool all_match = true;
for (const auto& cond : conditions) {
// 조건 하나라도 안맞으면 break씀
if (p.name.find(cond) == string::npos &&
p.address.find(cond) == string::npos &&
p.phone.find(cond) == string::npos &&
p.email.find(cond) == string::npos &&
p.web.find(cond) == string::npos) {
all_match = false;
break;
}
}
// 모든 조건 일치 출력
if (all_match) {
print_person(p);
}
}
}
Person get_person_info(string name) {
Person p;
string line;
p.name = name;
cout << " Address : ";
getline(cin, line);
p.address = trim(line);
cout << " Phone: ";
getline(cin, line);
p.phone = trim(line);
cout << "Email : ";
getline(cin, line);
p.email = trim(line);
cout << " Web: ";
getline(cin, line);
p.web = trim(line);
return p;
}
void add_person(string name) {
Person p = get_person_info(name);
auto it = directory.begin();
while (it != directory.end() && it->name <= name)
it++;
it = directory.insert(it, p);
}
void delete_person(string name)
{
string answer;
for (auto it = directory.begin(); it != directory.end(); )
{
if (it->name.compare(0, name.size(), name) == 0) {
cout << "Want to delete " << it->name << "'? ";
cin >> answer;
if (answer == "yes" || answer == "y")
it = directory.erase(it);
else
it++;
}
else if (it->name.compare(0, name.size(), name) > 0)
break;
else
it++;
}
}
void save_directory() {
ofstream outfile("address.tsv");
for (auto& p : directory)
outfile << p.name << '\t' << p.address << '\t' << p.phone
<< '\t' << p.email << '\t' << p.web << endl;
outfile.close();
}
int main() {
load_data("address.tsv");
string command, arguments;
while (1) {
cout << "$ ";
cin >> command;
cin.ignore();
if (command == "exit")
break;
if (command == "list")
list_directory();
else if (command == "find")
{
getline(cin, arguments);
string name = trim(arguments);
if (name.length() <= 0)
continue;
search_directory(name);
}
else if (command == "add")
{
getline(cin, arguments);
string name = trim(arguments);
if (name.length() <= 0)
continue;
add_person(name);
}
else if (command == "delete")
{
getline(cin, arguments);
string name = trim(arguments);
if (name.length() <= 0)
continue;
delete_person(name);
}
else if (command == "save")
{
save_directory();
}
else if (command == "search")
{
getline(cin, arguments);
string query = trim(arguments);
if (query.length() <= 0)
continue;
search_directory(query);
}
}
return 0;
}
split_line 함수:
이 함수는 주어진 문자열을 특정 구분자(예: 탭 문자)로 나누어 벡터에 저장합니다. 주로 파일에서 읽어온 데이터를 분리하여 저장하는 데 사용되며, 주소록 파일에서 이름, 주소, 전화번호, 이메일 등의 정보를 추출하는 데 활용됩니다.
2. trim 함수:
trim 함수는 문자열의 앞뒤에 있는 불필요한 공백 문자를 제거합니다. 이를 통해 사용자의 입력 또는 파일에서 읽어온 데이터를 깔끔하게 정리할 수 있습니다. 예를 들어, 이름이나 주소 입력 시 실수로 공백이 들어가도 제거할 수 있습니다.
3. load_data 함수:
이 함수는 파일로부터 주소록 데이터를 불러옵니다. 파일을 한 줄씩 읽어 들여서 각 줄을 탭 문자로 분리하고, Person 구조체에 이름, 주소, 전화번호, 이메일, 웹사이트 정보를 저장합니다. 그 후, 각 Person 객체는 directory 벡터에 추가됩니다. 이 과정은 프로그램이 시작될 때 기존 데이터를 로드하는 데 사용됩니다.
4. print_person 함수:
이 함수는 특정 사람의 정보를 출력합니다. 이름, 주소, 전화번호, 이메일, 웹사이트 정보를 깔끔하게 출력해주며, 사용자에게 선택된 사람의 정보를 보여줄 때 사용됩니다.
5. list_directory 함수:
현재 directory에 저장된 모든 사람의 정보를 출력하는 함수입니다. 이 함수는 주소록에 있는 모든 사람을 반복문을 통해 하나씩 출력합니다. 명령어 list가 입력되면 이 함수가 호출되어 전체 주소록을 표시합니다.
6. search_directory 함수:
사용자가 입력한 조건에 따라 directory에서 사람을 검색합니다. 여러 검색어가 & 문자로 연결되어 있을 경우, 각각의 조건이 모두 일치하는 사람을 찾아 출력합니다. 이 함수는 이름, 주소, 전화번호, 이메일, 웹사이트 정보를 모두 검색 범위로 삼아 검색 조건을 만족하는 사람을 찾아줍니다.
7. get_person_info 함수:
이 함수는 사용자가 직접 새로운 사람의 정보를 입력할 때 사용됩니다. 사용자는 이름 외에도 주소, 전화번호, 이메일, 웹사이트 정보를 차례로 입력하고, 입력된 데이터는 Person 구조체로 반환됩니다.
8. add_person 함수:
이 함수는 새로운 사람을 주소록에 추가합니다. 사용자가 이름을 입력하면, 그 이름에 대한 나머지 정보를 입력받아 directory 벡터에 삽입합니다. 이때 벡터는 이름을 기준으로 알파벳 순서로 정렬된 상태를 유지합니다.
9. delete_person 함수:
사용자가 입력한 이름에 해당하는 사람을 주소록에서 삭제하는 기능을 합니다. 해당 이름을 가진 사람이 있으면 삭제 여부를 사용자에게 확인한 후, 삭제를 원하는 경우 해당 사람의 정보를 주소록에서 삭제합니다. 이때 사용자가 여러 명의 이름을 검색할 수도 있습니다.
10. save_directory 함수:
현재의 주소록 상태를 파일에 저장하는 기능을 합니다. directory 벡터에 저장된 모든 사람의 정보를 파일(address.tsv)에 탭으로 구분된 형식으로 저장합니다. 이 함수는 명령어 save가 입력되었을 때 호출됩니다.
11. main 함수:
프로그램의 핵심적인 실행 흐름을 제어합니다. 프로그램이 시작되면 파일에서 주소록 데이터를 불러오고, 사용자에게 명령을 입력받아 처리합니다. 사용 가능한 명령어는 다음과 같습니다:
- list: 주소록의 모든 사람을 출력.
- find: 이름 또는 다른 조건에 맞는 사람을 검색.
- add: 새로운 사람을 주소록에 추가.
- delete: 주소록에서 특정 사람을 삭제.
- save: 현재 주소록 상태를 파일에 저장.
- exit: 프로그램 종료.
프로그램의 전체 흐름:
- 프로그램이 시작되면 address.tsv 파일에서 기존 데이터를 불러옵니다.
- 사용자로부터 명령어를 입력받고, 입력된 명령어에 따라 해당 작업을 수행합니다.
- 주소록을 출력하거나, 사람을 검색하고 추가 또는 삭제할 수 있습니다.
- 작업이 끝난 후 사용자가 save 명령어를 입력하면, 현재 상태를 파일에 저장합니다.
- 사용자가 exit 명령어를 입력하면 프로그램이 종료됩니다.
자료구조 4번 기능 추가
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cctype>
#include <cassert>
#include <map>
#include <regex>
#include <set>
using namespace std;
struct Person {
string name, address;
string phone, email, web;
bool is_favorite = false; // 즐겨찾기 여부
};
vector<Person> directory;
set<string> deleted_persons; // 삭제된 사람들 기록
vector<string> search_history; // 검색 기록
string last_modified_person; // 마지막으로 수정된 사람
// 데이터 분리 함수
vector<string> split_line(string& line, char delimiter) {
vector<string> tokens;
stringstream sstream(line);
string str;
while (getline(sstream, str, delimiter))
tokens.push_back(str);
return tokens;
}
// 공백 제거 함수
string trim(string str) {
int s = 0, t = str.length() - 1;;
while (s < str.length() && isspace(str[s]))
s++;
while (t >= 0 && isspace(str[t]))
t--;
if (s <= t)
return str.substr(s, t - s + 1);
else
return "";
}
// 유효성 검사 함수
bool validate_phone(const string& phone) {
return regex_match(phone, regex("^\\d{2,4}-\\d{3,4}-\\d{4}$")); // 전화번호 형식 확인
}
bool validate_email(const string& email) {
return regex_match(email, regex("[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}")); // 이메일 형식 확인
}
// 주소록 파일 로드
void load_data(string file_name) {
string line;
ifstream infile(file_name);
while (getline(infile, line)) {
vector<string> tokens = split_line(line, '\t');
assert(tokens.size() >= 4 && tokens.size() <= 5);
Person p;
p.name = tokens.at(0);
p.address = tokens.at(1);
p.phone = tokens.at(2);
p.email = tokens.at(3);
if (tokens.size() == 5)
p.web = tokens.at(4);
directory.push_back(p);
}
infile.close();
}
// 사람 정보 출력 함수
void print_person(const Person& p) {
cout << p.name << ":" << endl;
cout << " Address : " << p.address << endl;
cout << " Phone : " << p.phone << endl;
cout << " Email : " << p.email << endl;
cout << " Web : " << p.web << endl;
cout << (p.is_favorite ? " (즐겨찾기)" : "") << endl; // 즐겨찾기 여부 표시
}
// 전체 주소록 출력
void list_directory() {
for (const auto& person : directory) {
print_person(person);
}
}
// 즐겨찾기 추가/삭제 기능
void toggle_favorite(string name) {
for (auto& p : directory) {
if (p.name == name) {
p.is_favorite = !p.is_favorite; // 즐겨찾기 여부 토글
cout << name << " 즐겨찾기 " << (p.is_favorite ? "추가됨." : "삭제됨.") << endl;
return;
}
}
cout << "해당 이름을 가진 사람을 찾을 수 없습니다." << endl;
}
// 즐겨찾기 목록 출력
void list_favorites() {
cout << "즐겨찾기 목록:" << endl;
for (const auto& person : directory) {
if (person.is_favorite) {
print_person(person);
}
}
}
// 삭제된 사람 복원 기능
void restore_deleted_person(string name) {
if (deleted_persons.find(name) != deleted_persons.end()) {
cout << name << "을(를) 복원할 수 없습니다. 이미 복원되었습니다." << endl;
return;
}
for (const auto& p : directory) {
if (p.name == name) {
directory.push_back(p); // 복원
deleted_persons.insert(name); // 삭제된 기록 추가
cout << name << "이(가) 복원되었습니다." << endl;
return;
}
}
cout << "복원할 수 있는 이름을 찾을 수 없습니다." << endl;
}
// 디렉토리 검색 함수
void search_directory(string& prefix) {
stringstream ss(prefix);
string condition;
vector<string> conditions;
while (getline(ss, condition, '&')) {
conditions.push_back(trim(condition));
}
for (const auto& p : directory) {
bool all_match = true;
for (const auto& cond : conditions) {
if (p.name.find(cond) == string::npos &&
p.address.find(cond) == string::npos &&
p.phone.find(cond) == string::npos &&
p.email.find(cond) == string::npos &&
p.web.find(cond) == string::npos) {
all_match = false;
break;
}
}
if (all_match) {
print_person(p);
}
}
// 검색 기록 추가
search_history.push_back(prefix);
}
// 마지막 검색 기록 조회
void show_last_search() {
if (search_history.empty()) {
cout << "최근 검색 기록이 없습니다." << endl;
} else {
cout << "최근 검색 기록: " << search_history.back() << endl;
search_directory(search_history.back());
}
}
// 사람 정보 수정 함수
void modify_person(string name) {
for (auto& p : directory) {
if (p.name == name) {
cout << "수정할 항목을 선택하세요 (address, phone, email, web): ";
string field;
cin >> field;
cin.ignore();
string new_value;
cout << "새로운 값을 입력하세요: ";
getline(cin, new_value);
if (field == "address") p.address = trim(new_value);
else if (field == "phone") {
if (!validate_phone(new_value)) {
cout << "유효하지 않은 전화번호 형식입니다." << endl;
return;
}
p.phone = trim(new_value);
} else if (field == "email") {
if (!validate_email(new_value)) {
cout << "유효하지 않은 이메일 형식입니다." << endl;
return;
}
p.email = trim(new_value);
} else if (field == "web") p.web = trim(new_value);
else {
cout << "잘못된 항목입니다." << endl;
return;
}
last_modified_person = p.name; // 마지막 수정된 사람 기록
cout << name << "의 정보가 수정되었습니다." << endl;
return;
}
}
cout << "해당 이름을 가진 사람을 찾을 수 없습니다." << endl;
}
// 마지막 수정된 사람 출력
void show_last_modified_person() {
if (last_modified_person.empty()) {
cout << "최근 수정된 사람이 없습니다." << endl;
} else {
cout << "최근 수정된 사람: " << last_modified_person << endl;
}
}
// 사람 추가 함수
void add_person(string name) {
Person p;
p.name = name;
cout << " Address: ";
getline(cin, p.address);
cout << " Phone: ";
getline(cin, p.phone);
if (!validate_phone(p.phone)) {
cout << "유효하지 않은 전화번호 형식입니다." << endl;
return;
}
cout << " Email: ";
getline(cin, p.email);
if (!validate_email(p.email)) {
cout << "유효하지 않은 이메일 형식입니다." << endl;
return;
}
cout << " Web: ";
getline(cin, p.web);
directory.push_back(p);
}
// 사람 삭제 함수
void delete_person(string name) {
string answer;
for (auto it = directory.begin(); it != directory.end(); ) {
if (it->name.compare(0, name.size(), name) == 0) {
cout << it->name << "을(를) 삭제하시겠습니까? (yes/no): ";
cin >> answer;
if (answer == "yes" || answer == "y") {
deleted_persons.insert(it->name); // 삭제 기록
it = directory.erase(it);
cout << name << "이(가) 삭제되었습니다." << endl;
} else {
++it;
}
} else {
++it;
}
}
}
// 주소록 저장
void save_directory() {
ofstream outfile("address.tsv");
for (const auto& p : directory) {
outfile << p.name << '\t' << p.address << '\t' << p.phone
<< '\t' << p.email << '\t' << p.web << endl;
}
outfile.close();
cout << "주소록이 저장되었습니다." << endl;
}
// 도움말 출력
void print_help() {
cout << "명령어 목록:" << endl;
cout << " list - 모든 주소 출력" << endl;
cout << " add [이름] - 새 주소 추가" << endl;
cout << " delete [이름] - 주소 삭제" << endl;
cout << " modify [이름] - 정보 수정" << endl;
cout << " search [검색어] - 조건으로 검색" << endl;
cout << " favorite [이름] - 즐겨찾기 추가/삭제" << endl;
cout << " list_favorites - 즐겨찾기 목록 출력" << endl;
cout << " restore [이름] - 삭제된 사람 복원" << endl;
cout << " show_last_search - 마지막 검색 기록 조회" << endl;
cout << " show_last_modified - 마지막 수정된 사람 출력" << endl;
cout << " save - 현재 주소록 저장" << endl;
cout << " help - 도움말 출력" << endl;
cout << " exit - 프로그램 종료" << endl;
}
// 메인 실행 함수
int main() {
load_data("address.tsv");
string command, arguments;
while (true) {
cout << "$ ";
cin >> command;
cin.ignore();
if (command == "exit") break;
else if (command == "list") list_directory();
else if (command == "find") {
getline(cin, arguments);
search_directory(arguments);
}
else if (command == "add") {
getline(cin, arguments);
string name = trim(arguments);
if (!name.empty()) add_person(name);
}
else if (command == "delete") {
getline(cin, arguments);
string name = trim(arguments);
if (!name.empty()) delete_person(name);
}
else if (command == "modify") {
getline(cin, arguments);
string name = trim(arguments);
if (!name.empty()) modify_person(name);
}
else if (command == "favorite") {
getline(cin, arguments);
string name = trim(arguments);
if (!name.empty()) toggle_favorite(name);
}
else if (command == "list_favorites") list_favorites();
else if (command == "restore") {
getline(cin, arguments);
string name = trim(arguments);
if (!name.empty()) restore_deleted_person(name);
}
else if (command == "show_last_search") show_last_search();
else if (command == "show_last_modified") show_last_modified_person();
else if (command == "save") save_directory();
else if (command == "help") print_help();
else cout << "알 수 없는 명령어입니다. 'help' 명령어를 입력하여 도움말을 참조하세요." << endl;
}
return 0;
}
'IT 프로그래밍 > 자료구조' 카테고리의 다른 글
자료구조 과제3 (0) | 2024.10.23 |
---|---|
[자료구조] 노래찾기 (2) | 2024.10.23 |
[자료구조] 그룹 액티비티 4 (0) | 2024.10.23 |
[자료구조] 그룹 엑티비티 3 전문 (1) | 2024.10.22 |
[자료구조] 그룹 액티비티 3 (0) | 2024.10.22 |