P1597 语句解析(纯模拟)超暴力,来看看?

题目描述

一串长度不超过 255255 的 PASCAL 语言代码,只有a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];。未赋值的变量值为 00 输出a,b,c 的值。

输入格式

一串符合语法的 PASCAL 语言,只有a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 00。

输出格式

输出a,b,c 最终的值。

输入输出样例

输入 #1

a:=3;b:=4;c:=5;

输出 #1

3 4 5

说明/提示

输入的 PASCAL 语言长度不超过 255。

思路

设三个int变量用于记录a、b、c的值,然后直接开始遍历整个字符串中的a:=,b:=,c:=,还有各个等式等号后面对应的值,如果是数字就直接赋值(记得把数字从字符型转换为整型),如果是字符,就把这个字符所对应的int变量的值赋给冒号前的变量,就比如等号后面的是b,冒号前面的是a,就写成ax=bx,此题为大水题,洛谷甚至有同学用map来做,好吧,STL大法好,但是没这个必要。

代码如下:

#include<iostream>
#include<cstring>
using namespace std;

int ax,bx,cx;//定义三个变量用过来模拟字符a、b、c的值

int main(int argc,char **argv)
{
	char str[260];
	
	cin.getline(str,260);   //输入整个字符串
	
	for(int i=0;i<strlen(str);i++)
	{
		if(str[i]=='a'&&str[i+1]==':')//在整个字符串中截取a:或者a:=也行
		{
			if(str[i+3]>='0'&&str[i+3]<='9')
			{
				ax=str[i+3]-'0';	
			}
			else if(str[i+3]=='a')
			{
				ax=ax;	
			}
			else if(str[i+3]=='b')
			{
				ax=bx;
			}
			else if(str[i+3]=='c')
			{
				ax=cx;
			}
		}
		
		if(str[i]=='b'&&str[i+1]==':')//在整个字符串中截取b:或者b:=也行
		{
			if(str[i+3]>='0'&&str[i+3]<='9')
			{
				bx=str[i+3]-'0';	
			}
			else if(str[i+3]=='a')
			{
				bx=ax;	
			}
			else if(str[i+3]=='b')
			{
				bx=bx;
			}
			else if(str[i+3]=='c')
			{
				bx=cx;
			}
		}
		
		if(str[i]=='c'&&str[i+1]==':')//在整个字符串中截取c:或者c:=也行
		{
			if(str[i+3]>='0'&&str[i+3]<='9')//检查等号后的是变量还是数字
			{
				cx=str[i+3]-'0';	//数字就直接赋值
			}
			else if(str[i+3]=='a')   //下面三个else if,是变量就赋值
			{
				cx=ax;	
			}
			else if(str[i+3]=='b')
			{
				cx=bx;
			}
			else if(str[i+3]=='c')
			{
				cx=cx;
			}
		}	
	}
	
	printf("%d %d %d",ax,bx,cx);    //输出结果
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值