记录虾皮2022年秋季提前批校招笔试第二题
作者:
残魂残剑
,
2021-07-19 20:30:44
,
所有人可见
,
阅读 731
题目要求是给定一个字符串,该字符串用来表示平面坐标中一个(0,0)原点,进行字符串指令的移动后所得到的坐标值。
比如"300A25S8W6D"表示向左移动300单位,向下移动25单位,向上移动8个单位,向右移动6单位。输出结果就是
v:-294 , h:-17
具体代码如下所示:
#include <iostream>
#include <vector>
#include <string>
#include <string.h>
using namespace std;
bool isd(char c )
{
if(isdigit(c) != 0)
return true;
}
string getd(string &s,int &i)
{
int n=s.length();
string res="";
while(isd(s[i]))
{
res+=s[i];
i++;
if(i==n)
break;
}
return res;
}
vector<int> GetEndPoint(string order)
{
int i=0;
int n=order.length();
int h=0,v=0;
for(;i<n;)
{
// if(order[0]=='A')
// else if()
// else
string s=getd(order,i);
if(s!="")
{
int num=stoi(s);
if(order[i]=='A')
v-=num;
if(order[i]=='D')
v+=num;
if(order[i]=='S')
h-=num;
if(order[i]=='W')
h+=num;
}
else i++;
}
return {v,h};
}
int main()
{
// string s="D5A8S";
// vector<int > res= GetEndPoint(s);
// cout<<res[0]<<endl<<res[1];
string order="4D500A3000W6S";
vector<int > res= GetEndPoint(order) ;
cout<<res[0]<<endl<<res[1];
return 0;
}
这样写能ac嘛
好像需要区分大小写,
题目上说明给的输入都是WASD,因此不需要检查大小写。
因为那个题是只要求写接口函数就行,所以我是后来把它改成这种自定义输入的形式了,具体的格式化输入可以再改。