OJ(getline自定义分隔符)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Stark_JC/article/details/82080799

描述

输入是某电话公司的若干客户姓名及电话号码,中间用逗号分隔,然后是若干要查询的客户姓名,输出是这些查询的客户姓名及其电话。

输入

第一行是一个正整数n(不超过100000),表示某电话公式的客户个数,然后是n个客户,每个客户占一行,由一个字符串构成的姓名和一个电话号码组成,中间用逗号分隔,每个姓名的长度不超过45。

接下来是一个正整数m,然后是m个需要查询的客户姓名,每个姓名占一行。

输出

对于每个查询的客户,如果该客户是电话公式的客户,则显示其姓名和电话号码,如果不存在,则显示姓名和‘No’,中间用‘:’分隔。每个输出占一行。

输入样例

4
Bob,34778654
Ana,567894833
Alice,3456789
Gates,6893838
5
Alice
bob
Gate
Bob
Ana

输出样例

Alice:3456789
bob:No
Gate:No
Bob:34778654
Ana:567894833

思路

getline时以’,’为分隔符,将姓名提取出来,再用cin提取电话,此时缓冲区末尾还有一个换行符,需要用cin.get()去掉。

代码

#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main()
{
    int len;
    cin >> len;
    map<string, string> m;
    for (int i = 0; i < len; i++){
        cin.get();//前面cin后,最后的'\n'还在,需要手动去掉。
        string name;
        getline(cin, name, ',');//以','为分隔符,将姓名提取出来
        string phone;
        cin >> phone;
        //m.insert(pair<string,string>(name,phone));
        m[name] = phone;//这两种插入方式都可以,insert一般用于多值插入情况
    }
    cin >> len;
    for (int i = 0; i < len; i++){
        string name;
        cin >> name;
        if (m.find(name)==m.end())
            cout << name << ":No" << endl;
        else
            cout << name << ":" << m[name] << endl;
    }
    system("pause");
    return 0;
}
展开阅读全文

没有更多推荐了,返回首页