UVA 156 Ananagrams

题目链接: 点击打开链接

 题目大意:

 给出一段英文,不区分大小写,找出其中不能通过重排得到短文中其它任何一个单词的单词。

解题思路:

 现将每个单词大小写转化为一致的,之后将其排序,运用map函数映射寻找其中只出现一次的单词,输出原本单词。

代码:

 

#include
#include
#include
#include
using namespace std;
typedef struct stu{
	char s[1010];
	char s2[1010];
}st;
int cmp1(st a,st b)
{
	return strcmp(a.s2,b.s2)<0;
}
int cmp(char a,char b)
{
	return a1010];
int b[1010];
int main()
{
	
	int i,j,k,m,n;
	map<string,int> st;
	i=0;
	memset(b,0,sizeof(b));
	while(scanf("%s",s1[i].s))
	{
	   if(s1[i].s[0]=='#')
		  break;
	   strcpy(s1[i].s2,s1[i].s);
	   k=strlen(s1[i].s);
	   for(j=0;s1[i].s[j]!='\0';j++)
	     if(isupper(s1[i].s[j]))
		    s1[i].s[j]+=32; 
	   sort(s1[i].s,s1[i].s+k,cmp);
	   if(!st[s1[i].s])
	    st[s1[i].s]=i;
        b[st[s1[i].s]]++;  
	   i++;
	}
	sort(s1,s1+i,cmp1);
	for(j=0;jif(b[st[s1[j].s]]==1)
		 printf("%s\n",s1[j].s2);
	}
	return 0;
}
一道不错的题目,主要用到stl中的map函数映射,用起来很方便。
map函数用起来很方便,需要添加头文件#include,之后定义map a;之后a就相当于一个二位字
符串,每一个字符串都可以对应一个整数,即a["hello"]=7;当你不对其字符串赋值时,函数自动赋值为零。

你可能感兴趣的:(STL)