P1597 语句解析

1.题目介绍

语句解析

题目背景

木有背景……

题目描述

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

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

样例输出 #1

3 4 5

提示

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

2.题解

2.1 使用c++的字符串函数(会超时,暂时未知原因)

思路

使用了cin.peek函数,检测当前读入指针指向位置值,但并不移动指针,方便检验换行符
使用cin.read,一次从输入流中读取5个字符(一次赋值)到缓冲区中,并进行相关的判断

代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int arr[3] = {0};
	while (cin.peek() != '\n') {
        string str;
        char buffer[5];  // 5 characters + null terminator
        cin.read(buffer, 5);  // Read 5 characters
        char ch1 = buffer[0], ch2 = buffer[3]; 
		arr[ch1 - 'a'] = ch2 >= '0' && ch2 <= '9'? ch2 - '0': arr[ch2 - 'a']; 
    }	
	cout << arr[0] << ' ' << arr[1] << ' '<< arr[2];
}

2.2 使用C中的函数(参考了题解中一位大佬的做法)

思路

使用scanf按规定格式读入,检测其返回值(成功分配的变量数目)是否位2来决定循环是否继续进行
使用一步三目运算符 + 数组 解决所有情况。

代码

#include<cstdio>
using namespace std;
int a[3];char s1,s2;
int main()
{
    while (scanf("%c:=%c;",&s1,&s2)==2)//充分利用c++语言优势
     a[s1-'a']=s2>='0' && s2<='9' ? s2-'0' : a[s2-'a']; //赋值语句简洁明了
    printf("%d %d %d",a[0],a[1],a[2]);
}
posted @   DawnTraveler  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示