当前位置: 代码迷 >> 综合 >> uva-123 - Searching Quickly
  详细解决方案

uva-123 - Searching Quickly

热度:94   发布时间:2023-12-19 11:43:03.0
这道题目的意思是先给你一些字符为key[i],然后在遇到::时候终止,然后给你一些字符串,str[i]。
在这些字符串中的每一个单词如果与给定的所有的key不一样,就作为key_know,然后对key_know排序,最后输出排序后,key_know所在的字符串,并且除了key_know
是大写的之外,其他的都是小写的。#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{int i,j,q,leap,number_ti,T,key_number,n,w;int num[1000],dan_num[1000];char key[205][52];char key_get[52];char str[205][52];char strr[52];char key_know[205][52];leap=0;while(scanf("%s",key[leap])){if(strlen(key[leap])==2){if(key[leap][0]==':'&&key[leap][1]==':'){leap++;break;}}leap++;}getchar();key_number=leap;leap=0;T=0;while(gets(str[T])!=NULL){T++;n=strlen(str[T-1]);q=-1;w=0;for(i=0;i<n;i++){if(str[T-1][i]>='A'&&str[T-1][i]<='Z')str[T-1][i]+='a'-'A';}for(i=0;i<n;i++){q++;key_get[q]=str[T-1][i];if(str[T-1][i]==' '||i==n-1){w++;if(i==n-1)q++;key_get[q]='\0';q=-1;for(j=0;j<key_number;j++){if(strcmp(key_get,key[j])==0)break;}if(j==key_number){strcpy(key_know[leap],key_get);num[leap]=T-1;dan_num[leap]=w;leap++;}}}}for(i=0;i<leap;i++){for(j=i;j<leap;j++){if(strcmp(key_know[i],key_know[j])>0||(strcmp(key_know[i],key_know[j])==0&&num[i]>num[j])){strcpy(strr,key_know[i]);strcpy(key_know[i],key_know[j]);strcpy(key_know[j],strr);number_ti=num[i];num[i]=num[j];num[j]=number_ti;number_ti=dan_num[i];dan_num[i]=dan_num[j];dan_num[j]=number_ti;}}}for(i=0;i<leap;i++){w=1;for(j=0;j<strlen(str[num[i]]);j++){if(w!=dan_num[i]){printf("%c",str[num[i]][j]);}else{if(str[num[i]][j]!=' ')printf("%c",str[num[i]][j]+'A'-'a');elseprintf(" ");}if(str[num[i]][j]==' ')w++;}printf("\n");}return 0;
}