P1597 语句解析
1.题目介绍
语句解析
题目背景
木有背景……
题目描述
一串长度不超过 [变量]:=[变量或一位整数];
。未赋值的变量值为
输入格式
一串符合语法的 PASCAL 语言,只有
输出格式
输出
样例 #1
样例输入 #1
a:=3;b:=4;c:=5;
样例输出 #1
3 4 5
提示
输入的 PASCAL 语言长度不超过
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]);
}
分类:
洛谷
, 数据结构与算法 / 字符串
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了