题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <cctype>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void splitString(vector<std::string>&vecTmp, string& s, const char& deli)
{
auto firstPos = s.find_first_not_of(deli, 0);
auto lastPos = s.find_first_of(deli, firstPos);
while(firstPos != std::string::npos || lastPos != std::string::npos)
{
vecTmp.push_back(s.substr(firstPos, lastPos- firstPos));
firstPos = s.find_first_not_of(deli,lastPos);
lastPos = s.find_first_of(deli, firstPos);
}
}
bool IsJudgingleagalcoordinate(string& singleStr)
{
// vector<char> vecUpper({'A','D','W','S'});
if(singleStr.length() == 3)
{
if((singleStr[0] == 'A'|| singleStr[0] == 'D'
|| singleStr[0] == 'W' || singleStr[0] == 'S')
&& isdigit(singleStr[1]) && isdigit(singleStr[2]))
{
return true;
}
return false;
}
if(singleStr.length() == 2)
{
if((singleStr[0] == 'A'|| singleStr[0] == 'D'
|| singleStr[0] == 'W' || singleStr[0] == 'S')
&& isdigit(singleStr[1]))
{
return true;
}
return false;
}
return false;
}
int main() {
int x=0, y=0;
string str;
vector<string> arTmp;
string splitStr;
getline(cin, str);
splitString(arTmp, str, ';');
for(int i=0;i<arTmp.size();++i)
{
if(IsJudgingleagalcoordinate(arTmp[i]))
{
splitStr = arTmp[i];
if(splitStr[0] == 'A')
{
x -= atoi((splitStr.substr(1, 2)).c_str());
}
else if (splitStr[0] == 'D')
{
x += atoi((splitStr.substr(1, 2)).c_str());
}
else if (splitStr[0] == 'W')
{
y += atoi((splitStr.substr(1, 2)).c_str());
}
else
{
y -= atoi((splitStr.substr(1, 2)).c_str());
}
}
}
cout << x << "," << y << endl;
}
// 64 位输出请用 printf("%lld")
查看22道真题和解析