題目敘述
本題採EOF方式收資料,當資料的第一個字串為SHOW時,停止收資料並輸出陣列中的所有資料。字串會有三種指令:
1. ADD: 將字串放到陣列的最後面
2. INSERT: 將字串放到特定字串的前面
3. REMOVE: 將特定字串刪除
範例輸入 #1
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
範例輸出 #1
NEVER WEAR ANYTHING THAT SCARES YOUR CAT
解題思路
可以利用Vector的Push_Back來處理ADD這個動作。INSERT可以開一個For迴圈,把原本陣列的東西放到一個新的陣列,並且判斷目前的資料是否為要插入的資料,如果是的話就將指定的資料先Push_Back再將原本這個位置的資料做Push_Back,REMOVE的道理也是和INSERT一樣。INSERT和REMOVE完之後可以使用Assign將新的陣列複製到舊的陣列上。
解題程式碼如下 (僅供參考):
#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";
}
留言
張貼留言