UVA 156 Ananagrams (STL multimap & set)

原题链接:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=92

整体思路如下先建立一个 multimap<排序的词,未排序的词> 来处理输入,完毕后将只有一个值的键放入一个set中,最后遍历set输出即可。切忌不要误用成 map, 因为 multimap 允许重复元素,map 不允许有重复

更多有关 map 与 multimap 的区别可以查看这篇博客:https://blog.csdn.net/c_base_jin/article/details/51501214

下面就奉上 AC 代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <set>
#include <map>

using namespace std;

char ch[25], origin[25];

multimap <string, string> mmp;
set <string> con;

int main(void) 
{
	int len, i;
	while (scanf("%s", ch), ch[0] != '#') {
		strcpy(origin, ch);
		len = strlen(ch);
		
		for (int i = 0; i < len; i++)
			if (isupper(ch[i]))
				ch[i] = tolower(ch[i]);
				
		sort(ch, ch + len);
		mmp.insert(make_pair(ch, origin));
	}
	
	multimap <string, string>::iterator xp;
	set <string>::iterator it;
	for (xp = mmp.begin(); xp != mmp.end(); xp++) 
		if (mmp.count(xp -> first) == 1)
			con.insert(xp -> second);
	for (it = con.begin(); it != con.end(); it++)
		puts((*it).c_str());
		
	return 0;
}

猜你喜欢

转载自blog.csdn.net/laugh12321/article/details/81152224
今日推荐