鱼C论坛

 找回密码
 立即注册
查看: 1919|回复: 2

[已解决]这段代码有什么问题

[复制链接]
发表于 2022-9-24 14:06:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

请问这是怎么回事
最佳答案
2022-9-24 15:38:20
本帖最后由 dolly_yos2 于 2022-9-24 15:43 编辑

把传入 get_number 函数的参数打印出来试试,您会发现有趣的事情的。
另外这个并不是这段代码的唯一问题,只不过另一个(我发现的)问题由于这道题目的输入限制而恰好被避免掉了。
说到题目的输入限制,这道题目的输入格式非常简单且固定,您编写的代码实际上超出了解决这道题需要的复杂度。每一个赋值语句的格式精确为 < 1 字节变量名>:=<1 字节变量名> | <1 位整数>; ,解析这样的格式可能远不需要您目前的实现方式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-24 15:13:34 | 显示全部楼层
qwq直接用 scanf 不香嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-24 15:38:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 dolly_yos2 于 2022-9-24 15:43 编辑

把传入 get_number 函数的参数打印出来试试,您会发现有趣的事情的。
另外这个并不是这段代码的唯一问题,只不过另一个(我发现的)问题由于这道题目的输入限制而恰好被避免掉了。
说到题目的输入限制,这道题目的输入格式非常简单且固定,您编写的代码实际上超出了解决这道题需要的复杂度。每一个赋值语句的格式精确为 < 1 字节变量名>:=<1 字节变量名> | <1 位整数>; ,解析这样的格式可能远不需要您目前的实现方式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表