|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目地址: https://www.luogu.com.cn/problem/P1597
我的代码:- #include<iostream>
- using namespace std;
- string n;
- int a, b, c;
- string get_order() { // 获取指令,并从n中删除这一条指令
- int x = n.find(";");
- string order = n.substr(0, x);
- n.erase(0, x+1);
- return order;
- }
- int get_number(string num) { // 将字符串转化为数字
- int number = 0;
- for(int i=num.length()-1; i>=0; --i) {
- number *= 10;
- number += (num.c_str()[i] - '0');
- }
- return number;
- }
- void execute_order(string order) { // 执行指令
- string left = order.substr(0, order.find(":")); //获取等号左边的值
- order.erase(0, order.find("="));
- string rightemp = order; //获取等号右边的值
- int right;
- if(rightemp[0] == 'a') right = a;
- else if(rightemp[0] == 'b') right = b;
- else if(rightemp[0] == 'c') right = c;
- else right = get_number(rightemp);
- if(left[0] == 'a') a = right; //赋值
- else if(left[0] == 'b') b = right;
- else if(left[0] == 'c') c = right;
- }
- int main()
- {
- cin>>n;
- while(n.length()) {
- execute_order(get_order());
- }
- cout<<a<<" "<<b<<" "<<c;
- return 0;
- }
复制代码
输入:a:=3;b:=4;c:=5;
输出:43 53 63
请问这是怎么回事 
本帖最后由 dolly_yos2 于 2022-9-24 15:43 编辑
把传入 get_number 函数的参数打印出来试试,您会发现有趣的事情的。
另外这个并不是这段代码的唯一问题,只不过另一个(我发现的)问题由于这道题目的输入限制而恰好被避免掉了。
说到题目的输入限制,这道题目的输入格式非常简单且固定,您编写的代码实际上超出了解决这道题需要的复杂度。每一个赋值语句的格式精确为 < 1 字节变量名>:=<1 字节变量名> | <1 位整数>; ,解析这样的格式可能远不需要您目前的实现方式。
|
|