1 问题描述
NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。
现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。
输入描述:
输入有多组数据,每组数据有两行。
第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。
第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。
输出描述:
如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。
2 思路分析
1.将namelist进行字符串分割,并将每个名字存到字符串数组中。
-
a.当前字符为"字符,从"下一个字符开始拷贝,直到遇到下一个"字符,结束拷贝
-
b.当前字符为,分隔符,越过姓名分隔符后,继续判断下一个字符。
-
c.当前字符为名字,进行名字拷贝直到遇到姓名分隔符,字符.
2.遍历字符串数组,查找findname
-
如果存在,返回true;
-
否则,返回false
3 牛客链接:
4 代码实现
#include<iostream>
#include<vector>
#include<string>
using namespace std;
bool ExistName(string namelist, string findname)
{
vector<string> namevector;
for (int i = 0; i < namelist.size(); ++i)
{
if (namelist[i] == '\"')
{
i++;
namevector.resize(namevector.size() + 1);
while (i < namelist.size() && namelist[i] != '\"')
{
namevector[namevector.size() - 1] += namelist[i++];
}
}
else if (namelist[i] == ',')
{
continue;
}
else
{
namevector.resize(namevector.size() + 1);
while (i < namelist.size() && namelist[i] != ',')
{
namevector[namevector.size() - 1] += namelist[i++];
}
}
}
for (int i = 0; i < namevector.size(); ++i)
{
if (namevector[i] == findname)
return true;
}
return false;
}
int main()
{
string namelist;
string findname;
while(getline(cin,namelist))
{
getline(cin,findname);
if(ExistName(namelist,findname))
{
cout<<"Ignore"<<endl;
}
else
{
cout<<"Important!"<<endl;
}
namelist.clear();
}
return 0;
}