鱼C论坛

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

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

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

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

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

x
题目地址: https://www.luogu.com.cn/problem/P1597

我的代码:
  1. #include<iostream>
  2. using namespace std;
  3. string n;
  4. int a, b, c;
  5. string get_order() { // 获取指令,并从n中删除这一条指令
  6.         int x = n.find(";");
  7.         string order = n.substr(0, x);
  8.         n.erase(0, x+1);
  9.         return order;
  10. }
  11. int get_number(string num) { // 将字符串转化为数字
  12.         int number = 0;
  13.         for(int i=num.length()-1; i>=0; --i) {
  14.                 number *= 10;
  15.                 number += (num.c_str()[i] - '0');
  16.         }
  17.         return number;
  18. }
  19. void execute_order(string order) { // 执行指令
  20.         string left = order.substr(0, order.find(":")); //获取等号左边的值
  21.         order.erase(0, order.find("="));
  22.         string rightemp = order;                        //获取等号右边的值
  23.         int right;
  24.         if(rightemp[0] == 'a') right = a;            
  25.         else if(rightemp[0] == 'b') right = b;
  26.         else if(rightemp[0] == 'c') right = c;
  27.         else right = get_number(rightemp);
  28.         if(left[0] == 'a') a = right;                   //赋值
  29.         else if(left[0] == 'b') b = right;
  30.         else if(left[0] == 'c') c = right;
  31. }
  32. int main()
  33. {
  34.         cin>>n;
  35.         while(n.length()) {
  36.                 execute_order(get_order());
  37.         }
  38.         cout<<a<<" "<<b<<" "<<c;
  39.         return 0;
  40. }
复制代码


输入: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 位整数>; ,解析这样的格式可能远不需要您目前的实现方式。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-24 15:13:34 | 显示全部楼层
qwq直接用 scanf 不香嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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