許多程式設計任務的常見模式,是維護一個經常改變的項目清單,或者需要將輸入/輸出存到一個儲存裝置。而那些記錄的項目可能是一些等待批准的大學申請人。清單要能依照不同的指令,提供不同操作,像插入或刪除。
依照下面的功能定義寫一個程式,程式要提供能以下指令:增加、插入和移除。
ADD X:將X加入於清單的最下面。這個指令必須能在空的清單上執行。
INSERT X N:將X加入N的前面。
REMOVE X:將X從清單中刪除。
X、N 只含大寫英文字元
範例測資
範例輸入 | 範例輸出 |
---|---|
EOF 輸入,輸入的項目不會重複出現,指令「SHOW」表示輸入結束。 | 程式必須將清單以正確順序輸出,清單項目間以一個空白隔開 |
ADD NEVER ADD COLLAR INSERT CAT COLLAR ADD DOG ADD SCARES INSERT ANYTHING CAT REMOVE CAT INSERT THAT SCARES REMOVE COLLAR INSERT WEAR ANYTHING REMOVE DOG ADD CAT INSERT YOUR CAT SHOW | NEVER WEAR ANYTHING THAT SCARES YOUR CAT |
解題思路
可以利用 Vector 的 Push_Back 來處理 ADD 這個動作。INSERT 可以開一個 For迴圈,把原本陣列的東西放到一個新的陣列,並且判斷目前的資料是否為要插入的資料,如果是的話就將指定的資料先 Push_Back 再將原本這個位置的資料做 Push_Back,REMOVE 的道理也是和INSERT一樣。INSERT 和 REMOVE 完之後可以使用 Assign 將新的陣列複製到舊的陣列上。
範例程式碼-ZeroJudge A870: List Maker
#include <iostream>
#include <vector>
using namespace std;
int main() {
string command;
vector<string>v;
while (cin >> command && command != "SHOW")
{
if (command == "ADD")
{
string str;
cin >> str;
v.push_back(str);
}
else if (command == "INSERT")
{
string X, N;
cin >> X >> N;
vector<string>tmp;
for (int i = 0; i<v.size(); i++)
{
if (v[i] == N) tmp.push_back(X);
tmp.push_back(v[i]);
}
v.clear();
v.assign(tmp.begin(), tmp.end());
}
else
{
string str;
cin >> str;
vector<string>tmp;
for(int i = 0; i<v.size(); i++)
{
if (v[i] != str) tmp.push_back(v[i]);
}
v.clear();
v.assign(tmp.begin(), tmp.end());
}
}
for (int i = 0; i<v.size(); i++)
{
cout << v[i] << " ";
}
cout << "\n";
}
//ZeroJudge A870
//Dr. SeanXD