UVA 156 Ananagrams

来源:互联网 发布:出世之心入世之事 知乎 编辑:程序博客网 时间:2024/06/06 05:05

题目链接: 点击打开链接

 题目大意:

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

解题思路:

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

代码:

 

#include<iostream>#include<string.h>#include<map>#include<algorithm>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 a<b;}st s1[1010];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;j<i;j++){   if(b[st[s1[j].s]]==1) printf("%s\n",s1[j].s2);}return 0;}
一道不错的题目,主要用到stl中的map函数映射,用起来很方便。
map函数用起来很方便,需要添加头文件#include<map>,之后定义map<string,int> a;之后a就相当于一个二位字
符串,每一个字符串都可以对应一个整数,即a["hello"]=7;当你不对其字符串赋值时,函数自动赋值为零。
原创粉丝点击