题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <iostream>
#include <string>
#include <stdio.h>
#include <set>
#include <string.h>
#include <algorithm>
#include <map>
#include <iterator>
#include <vector>
using namespace std;
struct pos_t
{
int x, y;
};
enum STATE
{
STATE_INIT,
STATE_READ_LEFT,
STATE_READ_RIGHT,
STATE_READ_UP,
STATE_READ_DOWN,
STATE_ERROR
};
int main(void)
{
#ifdef DEBUG_TEST_LYJ
freopen("input.txt", "r", stdin);
#endif
string input;
getline(cin, input);
int val = 0;
pos_t pos = {0, 0};
size_t len = input.size();
STATE state = STATE_INIT;
for (int index = 0; index < len; ++index)
{
char current_char = input[index];
if (state == STATE_ERROR)
{
if (';' == current_char)
{
state = STATE_INIT;
}
else
{
continue;
}
}
else if (state == STATE_INIT)
{
if ('W' == current_char)
{
state = STATE_READ_UP;
}
else if ('A' == current_char)
{
state = STATE_READ_LEFT;
}
else if ('S' == current_char)
{
state = STATE_READ_DOWN;
}
else if ('D' == current_char)
{
state = STATE_READ_RIGHT;
}
else if (';' == current_char)
{
continue;
}
else
{
state = STATE_ERROR;
}
continue;
}
else
{
if ('0' <= current_char && '9' >= current_char)
{
val = (current_char - '0') + val * 10;
}
else if (';' == current_char)
{
if (val >= 0 && val <= 99)
{
switch (state)
{
case STATE_READ_RIGHT:
pos.x += val;
break;
case STATE_READ_LEFT:
pos.x -= val;
break;
case STATE_READ_DOWN:
pos.y -= val;
break;
case STATE_READ_UP:
pos.y += val;
break;
default:
break;
}
}
val = 0;
state = STATE_INIT;
}
else
{
val = 0;
state = STATE_ERROR;
}
}
}
cout << pos.x << "," << pos.y << endl;
return 0;
}
#include <string>
#include <stdio.h>
#include <set>
#include <string.h>
#include <algorithm>
#include <map>
#include <iterator>
#include <vector>
using namespace std;
struct pos_t
{
int x, y;
};
enum STATE
{
STATE_INIT,
STATE_READ_LEFT,
STATE_READ_RIGHT,
STATE_READ_UP,
STATE_READ_DOWN,
STATE_ERROR
};
int main(void)
{
#ifdef DEBUG_TEST_LYJ
freopen("input.txt", "r", stdin);
#endif
string input;
getline(cin, input);
int val = 0;
pos_t pos = {0, 0};
size_t len = input.size();
STATE state = STATE_INIT;
for (int index = 0; index < len; ++index)
{
char current_char = input[index];
if (state == STATE_ERROR)
{
if (';' == current_char)
{
state = STATE_INIT;
}
else
{
continue;
}
}
else if (state == STATE_INIT)
{
if ('W' == current_char)
{
state = STATE_READ_UP;
}
else if ('A' == current_char)
{
state = STATE_READ_LEFT;
}
else if ('S' == current_char)
{
state = STATE_READ_DOWN;
}
else if ('D' == current_char)
{
state = STATE_READ_RIGHT;
}
else if (';' == current_char)
{
continue;
}
else
{
state = STATE_ERROR;
}
continue;
}
else
{
if ('0' <= current_char && '9' >= current_char)
{
val = (current_char - '0') + val * 10;
}
else if (';' == current_char)
{
if (val >= 0 && val <= 99)
{
switch (state)
{
case STATE_READ_RIGHT:
pos.x += val;
break;
case STATE_READ_LEFT:
pos.x -= val;
break;
case STATE_READ_DOWN:
pos.y -= val;
break;
case STATE_READ_UP:
pos.y += val;
break;
default:
break;
}
}
val = 0;
state = STATE_INIT;
}
else
{
val = 0;
state = STATE_ERROR;
}
}
}
cout << pos.x << "," << pos.y << endl;
return 0;
}