zoukankan      html  css  js  c++  java
  • 【面试总结-编程】多行两列数据,实现同key的value求和并输出

    一个文件,两列,多行。

    第一列是字母,第二列是数字,同列数据之间通过空格分割。

    统计首列字母相同的第二列之和。

    样例输入:

    A 5

    B 6

    OO 7

    A 6

    A 2

    OO 2

    输出:

    A:13

    B:6

    OO:9

    面试官要求30分钟内实现,python,C++实现。

    夸下5分钟写完一种语言海口的我花了18分钟睡觉……(晕)

    然后开始整理思路,一开始写了很久vector+查找算法的(因为考虑map插入会导致覆盖),写了半天发现……太复杂了,而且查找算法确实应用的不熟练。后来转变一下思路map可以取出原来的值再加进去。。我去

    捡起来半生不熟的map用法。。

    思路就是:整个数据看作key-value结构,map的特性就是如果找一个不存在的,会自动插入并赋值默认值。value求和只需要找出对应key的map元素,取出当前的value(如果没有,int之类的默认是0),和新value相加后再塞回去。python直接利用字典这个结构即可。

     1 #include<map>
     2 #include<string>
     3 #include<iostream>
     4 #include<fstream>
     5 #include<sstream>
     6 
     7 using namespace std;
     8 
     9 typedef double datatype;
    10 
    11 template<typename T>
    12 void Stringtoother(string str, T &result)//编写的模板函数供之后重用,实现字符串到任意类型(如果可以)的转换
    13 {
    14     istringstream is(str);
    15     is >> result;
    16 }
    17 
    18 int main(int argc, char** argv) {
    19     map<string, datatype> mp;//声明最终存储的map
    20 
    21     ifstream in("D:\test.txt");//测试样例,完全符合要求的情况下测试正常(未考虑文件出错的情况)
    22 
    23     //ifstream in(argv[1]);//实际的路径,可以通过cmd读取
    24 
    25     if (in.fail())
    26     {
    27         cout << "文件打开失败!" << endl;
    28         system("pause");
    29         return -1;
    30     }
    31 
    32     string s;//文件读取每一行存储到的字符串
    33     mp.clear();
    34     while (getline(in, s))
    35     {
    36         int tag = s.find(" ");
    37         string temp1, temp2;
    38         temp1 = s.substr(0, tag - 1);
    39         temp2 = s.substr(tag + 1, s.size());
    40 
    41         int value = 0;
    42         Stringtoother(temp2, value);
    43         mp[temp1] += value;//键值先读取原来的,然后再相加后覆盖
    44 
    45     }
    46 
    47     map<string, datatype>::iterator it;//最终结果输出
    48     for (it = mp.begin(); it != mp.end(); it++) {
    49         cout << it->first << ":" << it->second << endl;
    50     }
    51 
    52     system("pause");
    53     return 0;
    54 }

    python实现

     1 def readFile(path):
     2     dict_data={}
     3     with open(path,'r') as df:
     4         for kv in [d.strip().split(' ') for d in df]:
     5             temp=dict_data.get(kv[0],0)
     6             dict_data[kv[0]]=float(kv[1])+temp
     7     return dict_data;
     8 
     9 test_data={}
    10 test_data=readFile("D:\test.txt")
    11 print(test_data)

     凉凉

  • 相关阅读:
    身份证验证(c#和js)
    获取焦点问题
    关于加载设计器遇到一个或多个错误问题的解决方案
    关于如何使用自定义的结束消息循环的方式 (转载)
    多种重要源码下载
    关于线程同步(转载)
    ArrayList的使用技巧
    一些所谓有利于家庭生活的优点
    080801 30℃
    080731 31℃
  • 原文地址:https://www.cnblogs.com/sbhyc/p/9135040.html
Copyright © 2011-2022 走看看