题解 | HJ17 #坐标移动#

坐标移动

http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29

思路来源于题解

重点是用一个string的vector来存储子串然后依次处理,还要主题题目中说了数字不超过两位,所以可以直接判断子串的位数来看是否合法。

#include 
#include 
using namespace std;
void coordinate_movement(string s)
{
    vector vec;//存储每一个子字符串
    int n = s.size();
    int sublen = 0;
    int x = 0, y = 0;
    for (int i = 0; i < n; i ++ )
    {
        if (s[i] != ';')
        {
            sublen ++ ;
            continue;
        }
        vec.push_back(s.substr(i - sublen, sublen));
        sublen = 0;
    }

    for (int i = 0; i < vec.size(); i ++ )
    {
        int num;
        //处理每一个子串
        if (vec[i].size() == 3 && vec[i][1] >= '0' && vec[i][1] <= '9' 
           && vec[i][2] >= '0' && vec[i][2] <= '9')
        {
            num = (vec[i][1] - '0') * 10 + (vec[i][2] - '0');
        }
        if (vec[i].size() == 2 && vec[i][1] >= '0' && vec[i][1] <= '9')
        {
            num = vec[i][1] - '0';
        }
        if (vec[i].size() == 1)
        {
            num = 0;
        }

        if (vec[i][0] == 'A') x -= num;
        if (vec[i][0] == 'S') y -= num;
        if (vec[i][0] == 'D') x += num;
        if (vec[i][0] == 'W') y += num;
    }

    cout << x << ',' << y ;
}
int main()
{
    string s;
    cin >> s;
    coordinate_movement(s);
    return 0;
}
全部评论

相关推荐

头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
Cherrycola01:0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务