传送门

  题意:从输入开始,1.输入样例数;2.然后输入一组样例中的行数n;3.前n-1行为定义变量(之间使用空格隔开),只需要map存进去就可以了(这里有覆盖的情况,故使用mp["s"] = "***"的方法赋值,因为insert的方法如果里面存在的话,插不进入数值);4.然后就是最后一行输入计算式子(之间使用空格隔开)。

  思路:我使用的字符流的方法分割的的字符串,因为题中说了使用空格隔开的;

    变量的储存使用map就可以,在最后一行输入计算式子之后,同样使用字符流分割的方法,分割出来,判断是加法减法变量、数 字(正负)。   我做的时候就是以为都是加法,所以WA了一次。

 1 #include <iostream>
2 #include <algorithm>
3 #include <sstream>
4 #include <string>
5 #include <vector>
6 #include <queue>
7 #include <map>
8
9 #include <cstdio>
10 #include <cstring>
11 #include <cmath>
12 using namespace std;
13
14 // 讲字符串转换为数字(这里的函数名起得不合适)
15 long long asksum(string str, int s) {
16 int len = str.length();
17 long long sum = 0;
18 for (int i = s; i < len; ++i) {
19 sum = sum*10+(str[i]-'0');
20 // cout << "qwe" << endl;
21 }
22 // cout << sum << "+++++" << endl;
23 if (s)
24 return sum*-1;
25 return sum;
26 }
27
28 int main() {
29 // ios::sync_with_stdio(false);
30 // cin.tie(NULL);
31 // cout.tie(NULL);
32
33 int t, n;
34 string str, s;
35 map<string, int> mp;
36 // 储存变量
37 cin >> t;
38 while (t--) {
39 cin >> n;
40 getchar();
41 mp.clear();
42 // 每一次清空上一次残留的变量
43 long long sum = 0;
44 for (int i = 0; i < n; ++i) {
45 getline(cin, str);
46 if (i == n-1) { // 在输入计算式的时候直接出结果,也可以讲变量和计算式分开
47 int flag = 1;
48 // 这个flag就是用来标记是加法还是减法的。
49 stringstream ss(str);
50 while (ss >> s) {
51 if (s[0] >= '0' && s[0] <= '9') {
52 sum += asksum(s, 0)*flag;
53 // cout << "+" << endl;
54 } else if (s[0] == '-' && s[1] >= '0' && s[1] <= '9'){
55 sum += asksum(s, 1)*flag;
56 // cout << "-" << endl;
57 } else if (s == "+") {
58 flag = 1;
59 } else if (s == "-") {
60 flag = -1;
61 } else if (s[0] >= 'a' && s[0] <= 'z') {
62 sum += mp[s]*flag;
63 }
64 }
65 } else {
66 stringstream ss(str);
67 string var;
68 int num = 0, zhi;
69 while (ss >> s) {
70 num++;
71 // 因为变量赋值只有三部分,所以这里只需要去第一次和第三次即可
72 if (num == 1) {
73 var = s;
74 } else if (num == 3) {
75 if (s[0] == '-')
76 zhi = asksum(s, 1);
77 else
78 zhi = asksum(s, 0);
79 }
80 }
81 mp[var] = zhi;
82 }
83 // cout << mp.size() << " = size" << endl;
84 }
85 // cout << "sum = " << sum << endl;
86 cout << sum << endl;
87 }
88
89 return 0;
90 }

hdu 3347

  关于字符串分流的知识点:字符串分割

HDU - 3347 Calculate the expression — 模拟 + map存变量的更多相关文章

  1. 组合数学第一发 hdu 2451 Simple Addition Expression

    hdu 2451 Simple Addition Expression Problem Description A luxury yacht with 100 passengers on board ...

  2. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  3. js模拟Map对象,实现key---value

    js模拟Map对象,实现key---value 根据java中map的属性,实现key----value保存 function Map() { var struct = function (key, ...

  4. BZOJ 2157: 旅游 (结构体存变量)

    用结构体存变量好像确实能提高运行速度,以后就这么写数据结构了 Code: #include <cstdio> #include <algorithm> #include < ...

  5. HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)

    6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...

  6. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  9. HDU 4814 Golden Radio Base 模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 题目大意: 把一个正整数表示为φ进制, φ = (1+√5)/2 . 且已知: 1. φ + 1 ...

随机推荐

  1. ASP.NET Core中间件初始化探究

    前言 在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,ASP.NET Core默认也为我们内置了许多的中间件,甚至有时候我们需要自定义中间件来帮我们处理一些请求管道 ...

  2. Sequelize 和 MySQL 对照Sequelize 和 MySQL 对照

    安装 这篇文章主要使用MySQL.Sequelize.co来进行介绍.安装非常简单: $ npm install --save co $ npm install --save sequelize $ ...

  3. TypeScript 入门自学笔记(一)

    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14542005.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...

  4. 使用jQuery实现ajax请求

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/3/13 Time: 14:54 To change this tem ...

  5. ch1_6_7求解数字排序问题

    import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Sca ...

  6. 什么是事务?事务的四个特性(ACID)?并发事务带来哪些问题?事务隔离级别都有哪些?事务的传播特性

    什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事物的四个 ...

  7. Java基础回顾_第二部分_Java流程控制

    Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...

  8. 全网最详细的Linux命令系列-rm命令

    今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除 ...

  9. [Fundamental of Power Electronics]-PART I-4.开关实现-4.1 开关应用

    4.1 开关应用 4.1.1 单象限开关 理想的SPST(Single pole single throw)开关如图4.1所示.开关包含电源端子1和0,其电流和电压极性如图所示.在接通状态下,电压\( ...

  10. MyBatis笔记(三)

    1. ResultMap 查询结果为null:要解决属性和字段名不一致的问题 我们先来看下步骤: 数据库中的字段名 Java中的实体类 public class User {    private i ...