HRBUST - 2378

HRBUST - 2378

小H是一个可爱的女孩,她特别喜欢看推特(tweeter)。有一天她得到了某位用户的一些推特消息,想从中提取出这个用户在这些消息中@了哪些人。但是这些消息太长了,她想请你来帮她完成这个任务。
每条消息中只会包含ASCII编码中的可见字符与空格。
推特中用户名的定义为一个长度大于0的字符串,且字符串中只包括数字0-9,英文字符a-z与A-Z,’-’与’_’。用户名区分大小写。
对@一个人的判定方式为:在消息中出现了”@username”,其中username为一个用户名,且为’@’后面所能匹配到最长的用户名。如”@TOM”,只能得到用户名TOM而不能得到用户名TO。同时’@’前面不能是一个合法的用户名字符,我们以此排除所有的邮箱信息。如”[email protected]”我们不会提取出用户名,但”[email protected]”我们要从中提取出”qq”。

input

输入数据第一行为T,代表数据组数。(T<=5)
对于每组数据,第一行为n,代表推特消息数。接下来的n行中,每一行有一条长度小于 140的推特消息。(n<=5)

output

对于每组数据,第一行为k,代表n条消息中共@了多少个人(若同一个人被@了不止一次,则我们只记录一次)。接下来的k行中,每一行输出一个被@的用户名,k个用户名按照字典序排序。

Sample Input

2
5
@all, wish you have a nice contest~~~
Good Luck with you, @Contestant, @HUST!
Have Fun! :- ) @All
Competition Topics By @HIT-CCPC
All Copyright Reserved @CCPC2018, @HIT-CCPC
4
HIT@CCPC
@HUST
@HIT-CCPC
@CCPC2018

Sample Output

6
All
CCPC2018
Contestant
HIT-CCPC
HUST
all
3
CCPC2018
HIT-CCPC
HUST

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;



int main() {
#ifdef LOCAL
	freopen("Text.txt", "r", stdin);
#endif
	int loop;
	cin >> loop;
	while (loop--) {
		int n;
		vector<string>v;
		cin >> n;
		getchar();
		while (n--) {
			string s;
			getline(cin, s);
			for (int i = 0; s[i]; i++) {
				if (s[i] == '@') {
					string p;
					if (i != 0 && ((s[i - 1] >= 'A'&&s[i - 1] <= 'Z') || (s[i - 1] >= 'a'&&s[i - 1] <= 'z') || (s[i - 1] >= '0'&&s[i - 1] <= '9') || s[i - 1] == '-' || s[i - 1] == '_'))
						continue;
					int j = i + 1;
					for (; s[j]; j++) {
						if ((s[j] >= 'A'&&s[j] <= 'Z') || (s[j] >= 'a'&&s[j] <= 'z') || (s[j] >= '0'&&s[j] <= '9') || s[j] == '-' || s[j] == '_') {
							p += s[j];
						}
						else break;
					}
					if (p != ""&&find(v.begin(), v.end(), p) == v.end()) {
						v.push_back(p);
					}
				}

			}

		}
		cout << v.size() << endl;
		sort(v.begin(), v.end());
		for (int i = 0; i < v.size(); i++)
			cout << v[i] << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41158699/article/details/83035034
今日推荐