首页 > 其他分享 >P1597 语句解析

P1597 语句解析

时间:2024-01-25 10:11:56浏览次数:27  
标签:语句 P1597 变量 int s2 cin 解析 赋值

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]);
}

标签:语句,P1597,变量,int,s2,cin,解析,赋值
From: https://www.cnblogs.com/trmbh12/p/17986412

相关文章

  • C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
    C#Methods方法是一段代码,只有在调用时才会运行。您可以将数据(称为参数)传递给方法。方法用于执行某些操作,也被称为函数。为什么使用方法?为了重用代码:定义一次代码,然后多次使用。创建一个方法方法的定义以方法的名称开头,后跟括号()。C#提供了一些预定义的方法,您已经熟悉,例如M......
  • Voxel R-CNN 代码解析
    1.网络主体架构以voxel_rcnn_car.yaml为例。主要包括:VFE(体素编码网络),这里采用下MeanVFE;BACKBONE_3D,这里采用VoxelBackBone8x;MAP_TO_BEV,这里采用HeightCompression,NUM_BEV_FEATURES为256;BACKBONE_2D,这里采用BaseBEVBackbone;DENSE_HEAD,这里采用AnchorHeadSingle;ROI_H......
  • C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
    C#Methods方法是一段代码,只有在调用时才会运行。您可以将数据(称为参数)传递给方法。方法用于执行某些操作,也被称为函数。为什么使用方法?为了重用代码:定义一次代码,然后多次使用。创建一个方法方法的定义以方法的名称开头,后跟括号()。C#提供了一些预定义的方法,您已经熟悉,例如......
  • BeautifulSoup和Cheerio库:解析QQ音频文件的完整教程
    在当今数字化的世界中,网络上充斥着各种各样的数据,而这些数据往往以各种不同的格式和结构存在。要从这些数据中获取有用的信息,我们就需要使用一些工具来解析和提取数据。BeautifulSoup和CheerioBeautifulSoup是Python中用于解析HTML和XML文档的库,而Cheerio是Node.js中类似的库。......
  • 【快速阅读四】基于边缘信息的模版匹配中贪婪度参数的简单解析。
    对这个课题稍作研究,以便记录。在基于边缘的模版匹配中,我们知道可以有个贪婪度参数可以设置。在Halcon的帮助文档中,也有对他进行说明。我们在Halcon那本经典的书上,没有看到对这个参数的解析。不过他也有讲到在计算某个候选位置的得分时,如果满足一定的条件也可以提前结束......
  • 深度解析Android APP加固中的必备手段——代码混淆技术
    AndroidAPP加固是优化APK安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下AndroidAPP加固的具体实现方式。混淆代码使用ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解,官网下载ipaguard即可。加固混淆为了保......
  • 线程管理神器:Executors全面解析
    内容摘要Executors在Java中提供了快速创建线程池的能力,其优点显著:它简化了线程管理,减少了代码量;提供了多种类型的线程池以适应不同场景;通过复用线程,降低了资源消耗,提高了系统响应速度和吞吐量。使用Executors,开发者能够更专注于业务逻辑,而无需深入底层线程细节。官方文档:https:/......
  • 前瞻性解析:数字孪生技术真正的实用价值
    在多领域2D、3D可视化监控层面确实是有实用价值的。数字孪生其实就是利用数字化技术创建的一个实体或系统的虚拟副本,它可以模拟和仿真现实世界的物理、工艺和行为特征。常被应用在2D和3D工业可视化监控中,通过将物理系统的数据与虚拟模型相结合,提供实时可视化的方式监测和管理......
  • 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)
    BeanDefinition的解析过程(面向注解)前面的几篇文章对Spring解析XML文件生成BeanDefinition并注册的过程进行了较为详细的分析,这种定义Bean的方式是面向资源(XML)的方式。面向注解定义Bean的方式Spring的处理过程又是如何进行的?本文将会分析Spring是如何将 @Component......
  • 条件测试语句和if流程控制语句的使用
    1、read命令read是一个在Unix/Linuxshell中用于从用户输入读取数据的命令。它允许您在脚本中接收用户的键盘输入,并将输入存储到变量中,以便后续处理。以下是一些read命令的示例用法:读取用户输入:echo"What'syourname?"readnameecho"Hello,$name!"在这个例子中,read......