每日OJ_牛客_抄送列表(切割字符串)

目录

牛客_抄送列表(切割字符串)

解析代码


牛客_抄送列表(切割字符串)

抄送列表__牛客网

每日OJ_牛客_抄送列表(切割字符串)_第1张图片


解析代码

本题是在第一行的人名中,查找第二行的人名是否存在。牵涉一个全字匹配的问题。步骤:

  1. 通过getiine(cin, names)方法获取第一行中的所有名字。
  2. 解析出第一行中的所有名字保存在unordered_set中。
  3. 获取第二行中的名字,检测该名字是否存在,并按照题目的要求进行输出。
#include 
#include 
using namespace std;

int main()
{
    string str1, str2;
    while (getline(cin, str1))
    {
        // 将第一行中的所有名字进行拆解,保存在unordered_set中
        unordered_set s;
        size_t pos = 0; 
        while (pos < str1.size())
        {
            if (str1[pos] == '\"') // 该名字使用""包含了,将该名字截取出来
            {
                size_t end = str1.find("\"", pos + 1);
                s.insert(str1.substr(pos + 1, end - pos - 1));
                pos = end + 2; // 跳掉后面的双引号和逗号
            }
            else // 该名字没有使用""包含,找到改名字的末尾后直接截取
            {
                size_t end = str1.find(",", pos + 1);
                if (end == -1) // 已经是最后一个名字了
                {
                    s.insert(str1.substr(pos, str1.size() - pos));
                    break;
                }
                s.insert(str1.substr(pos, end - pos));
                pos = end + 1; //跳掉后面的逗号
            }
        }

        getline(cin, str2); // 接收第二行的名字,然后检测其是否存在
        if (s.find(str2) == s.end())
            cout << "Important!" << endl;
        else
            cout << "Ignore" << endl;
    }
    return 0;
}

你可能感兴趣的:(c++,算法,开发语言,牛客,数据结构)