题解 | #坐标移动#

坐标移动

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

不懂正则表达式,按照状态机的思想分析每个字串,贴一下我又臭又长的代码

#include<bits/stdc++.h>
using namespace std;
int main ()
{
    string str;
    while(cin>>str)
    {
        vector<int> fenhao;
        fenhao.push_back(-1);
        int temp=-1;
        int flag=0;
        map<char,int> move;
        move.insert(make_pair('A',0));
        move.insert(make_pair('S',0));
        move.insert(make_pair('D',0));
        move.insert(make_pair('W',0));
        while(1)
        {
            temp=str.find(';',temp+1);
            if(temp==-1)
                break;
            else
                fenhao.push_back(temp);
        }
        fenhao.push_back(str.size());
        int cnt=fenhao.size()-1;
        for(int i=0;i<cnt;i++)
        {
            flag=0;
            char first;
            int second=0;
            for(int j=fenhao[i]+1;j<fenhao[i+1];j++)
            {
                switch(flag)
                {
                    case 0:
                        {
                            first=toupper(str[j]);
                            if(first!='A'&&first!='S'&&first!='D'&&first!='W')
                                flag=10;
                            else
                                flag++;
                            break;
                        }
                    case 1:
                        {
                            char next=str[j+1];
                            if(str[j]<='9'&&str[j]>='0')
                            {
                                if(str[j+1]<='9'&&str[j+1]>='0')
                                    second+=(str[j]-'0')*10;
                                else
                                {
                                    second+=(str[j]-'0');
                                    flag++;
                                }
                                flag++;
                            }
                            else
                                flag=10;
                            break;
                        }
                    case 2:
                        {
                            if(str[j]<='9'&&str[j]>='0')
                            {
                                second+=(str[j]-'0');
                                flag++;
                            }
                            else
                                flag=10;
                            break;
                        }
                    default:
                        {
                            flag=10;
                            break;
                        }
                }
                if(flag>3)
                    break;
            }
            if(flag==3)
            {
                move[first]+=second;
            }
        }
        cout<<move['D']-move['A']<<","<<move['W']-move['S']<<endl;
    }
    return 0;
}
全部评论
嵌入式也要去学习算法了吗
点赞 回复 分享
发布于 2021-08-19 17:46

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务