הסרת משימה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 21 מתוך 56.
אתגר
קלהרחב את כלי רשימת המשימות שלך באמצעות מימוש פונקציונליות להסרת משימות ספציפיות מהרשימה. זה ממשיך את השיעור הקודם ומוסיף את האפשרות להסיר משימות לפי מספר המיקום שלהן.
הקלטים הבאים יסופקו:
- מספר שלם
nשמייצג את מספר המשימות שיש להוסיף בתחילה - לאחר מכן
nמחרוזות שמייצגות את תיאורי המשימות - מספר שלם
taskNumberשמייצג את מספר המשימה להסרה (אינדקס שמתחיל ב־1)
על התוכנית שלך:
- להתחיל באותה הגדרה מהשיעור הקודם (
std::vector<std::string>ריק בשםtasksוהודעת פתיחה) - לקרוא את מספר המשימות באמצעות
cin >> n, ואז לקרוא ל־cin.ignore()כדי להשליך את תו ירידת השורה שנותר לפני קריאת מחרוזות המשימות באמצעותgetline() - להוסיף כל תיאור משימה למערך באמצעות
push_back() - לקרוא את מספר המשימה להסרה
- לוודא שמספר המשימה נמצא בטווח התקין (1 עד גודל המערך)
- אם מספר המשימה אינו תקין, להדפיס הודעת שגיאה
- אם מספר המשימה תקין, להשתמש בשיטה
.erase()כדי להסיר את המשימה במיקום שצוין - להדפיס הודעת אישור שמציינת איזו משימה הוסרה
- להציג את המשימות שנותרו ברשימה ממוספרת
- להציג את המספר המעודכן של המשימות
חשוב: שילוב של cin ו־getline():
כשקוראים מספר שלם באמצעות cin >> n, נשאר תו ירידת שורה ('\n') במאגר הקלט. אם קוראים לאחר מכן ל־getline(), היא תקרא מיד את תו ירידת השורה שנותר כמחרוזת ריקה, במקום את הקלט בפועל. כדי לפתור זאת, יש לקרוא ל־cin.ignore() מיד אחרי cin >> n כדי להשליך את תו ירידת השורה שנותר:
cin >> n;
cin.ignore(); // discard the leftover newline
for (int i = 0; i < n; i++) {
string task;
getline(cin, task); // now reads correctly
tasks.push_back(task);
}השתמש בפורמט הפלט המדויק הבא:
עבור מספר משימה לא תקין:
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Quit
Task list system initialized and ready!
Error: Invalid task number. Please enter a number between 1 and [total tasks].עבור הסרת משימה תקינה:
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Quit
Task list system initialized and ready!
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
2. [second remaining task]
...
Total tasks: [updated number of tasks]זכור ש־.erase() דורשת איטרטור, לכן יש להשתמש ב־tasks.erase(tasks.begin() + index), כאשר index הוא המיקום שמתחיל ב־0 (taskNumber - 1). אמת את הקלט על ידי בדיקה אם taskNumber גדול מ־0 וקטן או שווה ל־tasks.size(). אם הרשימה מתרוקנת לאחר ההסרה, הדפס את "No tasks remaining." במקום רשימת המשימות שנותרו.
נסו בעצמכם
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> tasks;
std::cout << "Welcome to Task List Tool!" << std::endl;
std::cout << std::endl;
std::cout << "Menu Options:" << std::endl;
std::cout << "1. Add Task" << std::endl;
std::cout << "2. View Tasks" << std::endl;
std::cout << "3. Quit" << std::endl;
std::cout << std::endl;
std::cout << "Task list system initialized and ready!" << std::endl;
int n;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::string task;
std::cin >> task;
tasks.push_back(task);
}
if (tasks.empty()) {
std::cout << "No tasks available." << std::endl;
} else {
std::cout << "Your Tasks:" << std::endl;
for (int i = 0; i < tasks.size(); i++) {
std::cout << (i + 1) << ". " << tasks[i] << std::endl;
}
std::cout << "Total tasks: " << tasks.size() << std::endl;
}
return 0;
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין