题目描述
一串长度不超过 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;
}