zoukankan      html  css  js  c++  java
  • HDU

      传送门

      题意:从输入开始,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

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

  • 相关阅读:
    虚函数******
    C++ 中的运算符重载********
    继承
    静态成员和成员函数
    类指针
    内联函数
    k8基础架构
    cobbler自动装机
    ens33-eth0
    PXE-自动装机配置
  • 原文地址:https://www.cnblogs.com/Ddlm2wxm/p/6843083.html
Copyright © 2011-2022 走看看