1. 题目来源
链接:收件人列表
来源:牛客网
2. 题目说明
NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。
现在给你一组收件人姓名,请你帮他生成相应的收件人列表。
输入描述:
输入包含多组数据。
每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓名。
紧接着n行,每一行包含一个收件人的姓名。姓名长度不超过16个字符。
输出描述:
对应每一组输入,输出一行收件人列表。
示例:
输入
3
Joe
Quan, William
Letendre,Bruce
2
Leon
Kewell
输出
Joe, “Quan, William”, “Letendre,Bruce”
Leon, Kewell
3. 题目解析
题意很明确,先接收到一个数字,代表接下来是多少组数据,可以单个进行处理,如果输入字符串里存在逗号或者空格,该字符串需要加双引号,输出双引号可以使用转义字符’"'进行输出,在输出单字符时,putchar()由于其底层实现简单,故效率要比printf及cout高。
4. 代码展示
// write your code here cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
// 接受数字
while (cin >> n) {
cin.get();
string name;
// 名字分别处理
for (int i = 0; i < n; ++i) {
bool flag = false;
getline(cin, name);
if (name.find(',') != string::npos ||
name.find(' ') != string::npos) // 找到逗号或者空格,就要加双引号
flag = true;
if (flag)
putchar('\"'); // cout << '\"'; 使用putchar效率更高
cout << name;
if (flag)
putchar('\"');
if (i == n - 1) // 如果已经是最后一个字符串,那就补回车,否则加逗号和空格
putchar('\n');
else {
putchar(',');
putchar(' ');
}
}
}
return 0;
}