/********************************** 日期:2013-2-18* 作者:SJF0115* 题号: 九度OJ 题目1029:魔咒词典* 来源:http://ac.jobdu.com/problem.php?pid=1029* 结果:AC* 来源:2008年浙江大学计算机及软件工程研究生机试真题* 总结:**********************************/#include<map>#include<string>#include<iostream>#include<string.h>#include <stdio.h>using namespace std; map<string,string> Map;int Function(string str){ int len=str.length(); int i; for(i = 0;i < len;i++) { if(str[i]==']') { break; } } //魔咒 string s1 = str.substr(0,i+1); //对应功能 string s2 = str.substr(i+2,len-i-2); //存储在Map中 Map[s1] = s2; Map[s2] = s1; return 0;} int main(){ char s[105];int n,i; string str;//输入数据 while(gets(s)){ str = s; if(str == "@END@") {break;}//分割魔咒及其对应功能 Function(str); } scanf("%d\n",&n); for(i = 0;i < n;i++){ gets(s);str = s;//寻找魔咒或者对应功能 if(Map.find(str) == Map.end()){printf("what?\n");} else{ str = Map[str]; //输出对应的功能 if(str[0] != '[') { cout<<str<<endl; } //输出对应的魔咒 else { cout<<str.substr(1,str.length()-2)<<endl; } } }//forreturn 0;}
转载
#include <stdio.h>#include <string.h>#include <stdlib.h> struct dic{ char wo[22]; char ex[82];}a[10000],b[10000]; int cmp1(const void *a,const void *b){ return strcmp((*(struct dic *)a).wo,(*(struct dic *)b).wo);} int cmp2(const void *a,const void *b){ return strcmp((*(struct dic *)a).ex,(*(struct dic *)b).ex);} int main(){ int i,k; int n,high,low,mid,tmp,ans; char s[104],c[82]; k=0; while(gets(s)&&strcmp(s,"@END@")) { int j=0; i=1; while(s[i]!=']') { a[k].wo[j]=s[i]; b[k].wo[j]=s[i]; j++; i++; } a[k].wo[j+1]='\0'; b[k].wo[j+1]='\0'; if(s[i]==']') i+=2; j=0; while(s[i]!='\0') { a[k].ex[j]=s[i]; b[k].ex[j]=s[i]; j++; i++; } a[k].ex[j+1]='\0'; b[k].ex[j+1]='\0'; k++; } qsort(a,k,sizeof(a[0]),cmp1); qsort(b,k,sizeof(b[0]),cmp2); scanf("%d",&n); getchar(); while(n--) { gets(c); ans=-1; low=0;high=k-1; if(c[0]=='[') { int len; len=strlen(c); for(i=0;i<len-2;i++) c[i]=c[i+1]; c[i]='\0'; while(low<=high) { mid=(low+high)/2; tmp=strcmp(c,a[mid].wo); if (tmp==0) {ans=mid;break;} else if(tmp>0) low=mid+1; else high=mid-1; } if(ans==-1) printf("what?\n"); else printf("%s\n",a[ans].ex); } else { while(low<=high) { mid=(low+high)/2; tmp=strcmp(c,b[mid].ex); if (tmp==0) {ans=mid;break;} else if(tmp>0) low=mid+1; else high=mid-1; } if(ans==-1) printf("what?\n"); else printf("%s\n",b[ans].wo); } }return 0;}
Runtime Error 拜求大牛????????????
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct Str{char name[22];//魔咒char function[82];//对应功能}Str;Str str[10001];int main() {int n,i,j,index = 0,flag,start,k;char s[104];//char command[104]; while (gets(s)){//词典最后一行以“@END@”结束,这一行不属于词典中的词条if(s[0] == '@'){break;}else{//输入魔咒for(i = 0;s[i] != ']';i++){str[index].name[i] = s[i];}str[index].name[i++] = ']';str[index].name[i] = '\0';//输入对应功能start = i+1;for(i = start,k = 0;s[i] != '\n';k++,i++){str[index].function[k] = s[i];}str[index].function[k] = '\0';}index++; }//whilescanf("%d\n",&n);for(i = 0;i < n;i++){gets(s);flag = 0;//输入的是魔咒输出对应功能if(s[0] == '['){for(j = 0;j < index;j++){//找到魔咒对应的功能if(strcmp(s,str[j].name) == 0){flag = 1;//输出对应的功能printf("%s\n",str[j].function);break;}}}//输入的是魔咒的功能输出魔咒else{for(j = 0;j < index;j++){//找到对应的魔咒if(strcmp(s,str[j].function) == 0){flag = 1;//输出对应的魔咒for(k = 1;str[j].name[k] != ']';k++){printf("%c",str[j].name[k]);}printf("\n");break;}}}//没有找到if(flag == 0){printf("what?\n");}} return 0;}