题目:
题目链接:牛客原题
#include <iostream>
#include <string>
#include <queue>
using namespace std;
int judge(string str)
{
// cout << "str=" << str << endl;
if (str[0] != 'W' && str[0] != 'A' && str[0] != 'S' && str[0] != 'D')
return 0;
for (int i = 1; i < str.size(); i++)
{
if (str[i] >= '0' && str[i] <= '9')
;
else
return 0;
}
return 1;
}
int main()
{
string S;
string S_num;
int x = 0;
int y = 0;
int num;
int size;
queue<string> Q;
string str;
getline(cin, str);
string temp;
for (int i = 0; i < str.size(); i++)
{
if (str[i] != ';')
temp += str[i];
else
{
if (judge(temp))
{
Q.push(temp);
cout << temp << endl;
}
temp.clear();
}
}
size = Q.size();
cout << "size" << size << endl;
for (int i = 0; i < size; i++)
{
S = Q.front();
cout << "queue-S" << S << endl;
S_num = S;
S_num.erase(0, 1);
num = stoi(S_num);
// cout << "num" << num << endl;
switch (S[0])
{
case 'W':
y += num;
break;
case 'A':
x -= num;
break;
case 'S':
y -= num;
break;
case 'D':
x += num;
break;
}
S.clear();
Q.pop();
num = 0;
}
cout << x << "," << y << endl;
}
本题大概讲解:
其实就是把一整串字符串遇到“ ; ”分割成单个字符串,然后根据要求进行对比。我借助了队列的数据结构,它的先进先出的特性很符合本题的要求,使用队列来进行小字符串的存储和使用,符合要求的各小串进入队列,等待使用。分割完成后,弹出队列首部,一个switch-case语句进行判断上下左右,然后其坐标进行相应加减。
大概就这样!