题解:洛谷 P1597 语句解析
【题目来源】
【题目描述】
一串长度不超过 \(255\) 的 PASCAL 语言代码,只而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];。未赋值的变量值为 \(0\) 输出 \(a,b,c\) 的值。
【输入】
一串符合语法的 PASCAL 语言,只有 \(a,b,c\) 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 \(0\)。
【输出】
输出 \(a,b,c\) 最终的值。
【输入样例】
a:=3;b:=4;c:=5;
【输出样例】
3 4 5
【算法标签】
《洛谷 P1597 语句解析》 #模拟# #字符串#
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
using namespace std; // 使用标准命名空间
int main()
{
int a = 0, b = 0, c = 0; // 定义变量:三个变量a、b、c,初始化为0
string s; // 定义字符串:存储输入的赋值语句
cin >> s; // 输入赋值语句字符串
// 遍历字符串,解析赋值语句
for (int i = 0; i < s.length(); i++)
{
// 检查是否为a的赋值语句(格式:a:=x)
if (s[i] == 'a' && s[i + 1] == ':' && s[i + 2] == '=')
{
// 如果赋值为数字
if (s[i + 3] >= '0' && s[i + 3] <= '9')
a = s[i + 3] - '0'; // 将字符数字转换为整数值
// 如果赋值为变量b
if (s[i + 3] == 'b')
a = b;
// 如果赋值为变量c
if (s[i + 3] == 'c')
a = c;
}
// 检查是否为b的赋值语句(格式:b:=x)
if (s[i] == 'b' && s[i + 1] == ':' && s[i + 2] == '=')
{
// 如果赋值为数字
if (s[i + 3] >= '0' && s[i + 3] <= '9')
b = s[i + 3] - '0';
// 如果赋值为变量a
if (s[i + 3] == 'a')
b = a;
// 如果赋值为变量c
if (s[i + 3] == 'c')
b = c;
}
// 检查是否为c的赋值语句(格式:c:=x)
if (s[i] == 'c' && s[i + 1] == ':' && s[i + 2] == '=')
{
// 如果赋值为数字
if (s[i + 3] >= '0' && s[i + 3] <= '9')
c = s[i + 3] - '0';
// 如果赋值为变量a
if (s[i + 3] == 'a')
c = a;
// 如果赋值为变量b
if (s[i + 3] == 'b')
c = b;
}
}
// 输出三个变量的最终值
cout << a << " " << b << " " << c;
return 0; // 程序正常结束
}
【运行结果】
a:=3;b:=4;c:=5;
3 4 5
浙公网安备 33010602011771号