当前位置: 首页 > news >正文

P1957 口算练习题

这是一个经典的字符串处理与模拟题。这道题的核心考点在于非定长输入的处理(即如何判断当前行是给了运算符还是直接给的数字)。

解题思路

  1. 输入判断

    由于每一行的输入格式不固定(可能是 运算符 数 数,也可能是 数 数),我们不能直接用 cin >> char >> int >> int

    • 策略:每次循环先读取第一个“标记”(Token)作为字符串。
    • 检查:判断这个字符串的首字符是否为字母(a, b, c)。
      • 如果是字母:更新当前的运算符,再读取后面两个整数。
      • 如果是数字:将该字符串转换为第一个整数(使用 stoiatoi),沿用上一次的运算符,再读取第二个整数。
  2. 计算与输出

    • 根据运算符进行加减乘计算。
    • 长度获取:最简便的方法是利用 sprintf 将完整的算式(如 5+8=13)打印到一个字符数组中,然后直接获取该数组的长度(strlen)或转换为 string.length()

参考代码

#include <iostream>
#include <string>
#include <cstdio>  // 用于 sprintf
#include <cstring> // 用于 strlen
#include <cctype>  // 用于 isalphausing namespace std;int main() {int n;cin >> n;char op; // 用于记录当前的运算符string first_token; // 用于读取每行的第一个数据(可能是运算符,也可能是数字)for (int i = 0; i < n; i++) {cin >> first_token;int x, y;// 判断第一个数据是字母还是数字if (isalpha(first_token[0])) {op = first_token[0]; // 更新运算符cin >> x >> y;       // 继续读入两个数字} else {// 如果不是字母,说明是数字,转换类型x = stoi(first_token); // 将字符串转为整数cin >> y;              // 只需要再读一个数字,运算符沿用上一次的 op}int res = 0;char op_symbol;// 根据 op 执行计算if (op == 'a') {res = x + y;op_symbol = '+';} else if (op == 'b') {res = x - y;op_symbol = '-';} else if (op == 'c') {res = x * y;op_symbol = '*';}// 格式化输出并计算长度// 使用 sprintf 将结果打印到 buffer 中,方便计算总长度char buffer[100];sprintf(buffer, "%d%c%d=%d", x, op_symbol, y, res);cout << buffer << endl;cout << strlen(buffer) << endl;}return 0;
}

关键点解析

  1. isalpha() 的使用:这是判断字符是否为字母的标准库函数。对于初学者,也可以直接判断 if (first_token[0] >= 'a' && first_token[0] <= 'z')
  2. 状态保持:题目中提到“若该行为两个数据,则表示本题的运算类型与上一题相同”。这就要求我们将 op 变量定义在循环外部,或者保证在未读取新运算符时,op 的值不被清空。
  3. 算式长度计算
    • 推荐做法:如代码所示,使用 sprintf 生成完整字符串。这是处理“由数字和符号组成的混合字符串长度”最不易出错的方法。
    • 数学做法:分别计算 x, y, res 的位数,再加上符号位的数量。这种方法需要处理负数符号(例如减法结果为负数时),逻辑较繁琐,容易遗漏细节。
http://www.jsqmd.com/news/312224/

相关文章:

  • Starlink防水电源线供应商怎么选,分享优质品牌排名
  • 2026年推荐高档商业空间装修专业公司,口碑好的有哪些
  • 2026年靠谱的埋入式陶瓷加热板/高温陶瓷加热板厂家选购参考汇总
  • Python修改pip install 指定安装包的路径和默认镜像源 - 实践
  • 聊聊潜水推流器,蓝奥环保优质生产商产品特色解读
  • 2026年知名的汽车吸尘器/无线吸尘器厂家热卖产品推荐(近期)
  • Starlink防水电源线制造企业哪家好,深圳东莞优质厂家盘点
  • 二氧化碳供应商市场观察:服务能力与可靠性参考,汽化器/真空管/液氮速冻机/液氮/制氧机/储罐,二氧化碳供应商推荐榜单
  • 2026年长三角电竞酒店区域代理排名,竞悦电竞酒店靠谱之选
  • 绵阳实验学校新排行:这些学校教育实力不容小觑,高中/中学/名办高中/学校/实验学校/高中复读学校,实验学校直销厂家排行
  • 2026年婚庆篷房布制造商排名,质量有保障的品牌怎么选择
  • 2026年评价高的加热管电热管生产设备/数控电热管生产设备值得信赖厂家推荐(精选)
  • 2026年口碑好的加胶玻璃/防火中空玻璃优质厂商精选推荐(口碑)
  • 2026成都卤菜火锅社区店:美味与氛围并存,特色美食/社区火锅/火锅/美食/老火锅/火锅店/烧菜火锅,卤菜火锅品牌排行榜
  • 2026年四川iso27001认证咨询优质机构推荐榜:iso9001认证、业务连续性管理体系认证、人工智能管理体系认证选择指南
  • AI智能分析系统在明厨亮灶的应用方案
  • 2026年知名的28寸本安型LCD显示器/43寸本安型LCD显示器厂家热卖产品推荐(近期)
  • 2026年如何学习网络安全?网络安全学习路线
  • 深度测评!本科生论文痛点TOP9 AI论文软件全解析
  • 免费音效素材网站推荐
  • 软件测试VS网络安全渗透测试,聊聊软测转网安渗透测试那些事儿
  • 关于网络安全渗透测试的常见误区
  • 鸿蒙 HarmonyOS 6 | AI Kit 集成 CANN Kit 异构计算服务
  • 2026年质量好的上海粉末包装机/真空包装机厂家采购参考指南(必看)
  • HRM人事管理系统企业源码(Java+Vue)
  • 2026年知名的沟槽管件法兰/山西沟槽管件钢卡厂家实力与用户口碑参考
  • 2026年评价高的玛钢管件管帽堵头/内外丝玛钢管件高口碑厂家推荐(评价高)
  • 2026年比较好的涂装生产线/生产线厂家选购完整指南
  • 2025年国内热门的中型货架生产厂家如何选,穿梭式货架/平台货架/自动化立体库/轻型货架,中型货架实力厂家联系电话
  • 2026年比较好的航空留学学校/澳新航空留学行业权威榜