P1597 语句解析

题目背景

木有背景……

题目描述

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

输入格式

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

输出格式

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

输入输出样例

输入 

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

输出 

3 4 5

说明/提示

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

思路

这题只要照着题目一步步做就可以了(暴力枚举):

第一步(还有第二步):

只付值数字代码:

#include<bits/stdc++.h>
using namespace std;
typedef std::string str;//将string简写成str 
int a,b,c,p; 
int main()
{
	//加快输出输入
	std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    
    str s,t;
    getline(cin,s);
    t=":=";
	p=s.find(t);//找不到时返回s.npos,在int里为-1 
	while(p!=-1)
	{
		if(isdigit(s[p+2]))//判断数字
		{
			if(s[p-1]=='a')	a=int(s[p+2])-48;
			if(s[p-1]=='b') b=int(s[p+2])-48;
			if(s[p-1]=='c') c=int(s[p+2])-48;
		 } 
		 p=s.find(t,p+2);
	 } 
	 cout<<a<<" "<<b<<" "<<c;
	return 0;
}

看懂了吗?(().find()函数要看懂)

第二步:

加上变量(直接判断):

#include<bits/stdc++.h>
using namespace std;
typedef std::string str;//将string简写成str 
int a,b,c,p; 
int main()
{
	//加快输出输入
	std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    
    str s,t;
    getline(cin,s);
    t=":=";
	p=s.find(t);//找不到时返回s.npos,在int里为-1 
	while(p!=-1)  
	{
		if(isdigit(s[p+2]))//判断数字
		{
			if(s[p-1]=='a')	a=int(s[p+2])-48;
			if(s[p-1]=='b') b=int(s[p+2])-48;
			if(s[p-1]=='c') c=int(s[p+2])-48;
		 } 
		 else if(isalpha(s[p+2])) //赋值变量 
		{
			char f1=s[p-1];
		 	char f2=s[p+2]; //方便简写 
		 	
			if(f1=='a'&&f2=='b') a=b;
			if(f1=='a'&&f2=='c') a=c;
			if(f1=='b'&&f2=='a') b=a;
			if(f1=='b'&&f2=='c') b=c;
			if(f1=='c'&&f2=='a') c=a;
			if(f1=='c'&&f2=='b') c=b;
		}
		 p=s.find(t,p+2);
	 } 
	 cout<<a<<" "<<b<<" "<<c;
	return 0;
}

提交结果: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值