17.4.8.Problem A: 六队-某其他的语言_模拟

Description
输入一段无输入的合法brain fuck语句,输出运行结果
这里写图片描述

Brain fuck语句中字符的含义如下
Input
上述语句

Output
运行结果

Sample Input
+++++++++++++++++++++++++++++++++.[->+<]>++.
Sample Output
!#
HINT

(样例输出末尾无换行)

分析:
模拟题 直接上代码 这里 用创建一个新的指针并取代原来的 的方式实现“>”

#include<set>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<string>

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>

#include<iomanip>
#include<iostream>

#define inf 0x3f3f3f3f
#define LL long long
#define ULL unsigned long long
#define Min(a,b) (((a)<(b))?(a):(b))
#define Max(a,b) (((a)>(b))?(a):(b))
#define fast ios_base::sync_with_stdio(false) 
using namespace std;
struct node
{
    int va;
    node *a,*b;
    node(int x,node *aa,node *bb)
    {
        va=x; a=aa; b=bb;
    }
    node(){}
};
string s;
node *temp,*p;
void solve(int x,int y)
{
    for(int i=x;i<y;i++)
    {
        if(s[i]=='+') p->va++;
        else if(s[i]=='-') p->va--;
        else if(s[i]=='>') 
        {
            if(p->b==NULL)
            {
                temp=new node(0,p,NULL);
                p->b=temp;
            }
            p=p->b;
        }
        else if(s[i]=='<')
        {
            if(p->a==NULL)
            {
                temp=new node(0,NULL,p);
                p->a=temp;
            }
            p=p->a;
        }
        else if(s[i]==',')
        {
            i++;
            p->va=s[i];
        }
        else if(s[i]=='.')
        {
            cout<<(char)(p->va);
        }
        else if(s[i]=='[')
        {
            int j=i+1;
            while(s[j]!=']') j++;
            while(p->va != 0) solve(i+1,j);
            i=j;
        }
    }
}
int main()
{
    int len;
    while(cin>>s)
    {
        p=new node(0,NULL,NULL);
        len=s.length();
        solve(0,len);
    }
    return 0; 
}
/**************************************************************
    Problem: 1724
    User: zjut_22
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1676 kb
****************************************************************/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值