您的位置:首页 > 其它

字符串-409 - Excuses, Excuses!

2016-07-23 14:08 351 查看
题目大意:自动检测烂借口,根据关键词判断哪些理由是蹩脚的借口:关键词出现得越多,说明借口越蹩脚,输出最烂的借口

解题过程:2次compiler error,因为使用了strlwr()函数,不是标准C库函数,只在VC中可以用,但是DEV_C++通过了。。改成tolower()函数后,一次AC

正确代码:
# include <cstdio>
# include <ctime>
# include <cmath>
# include <iostream>
# include <fstream>
# include <cstring>
# include <ctype.h>
# include <cstdlib>
# include <string>
#define fin cin
#define fout cout

using namespace std;

//ifstream fin("in.txt");
//ofstream fout("out.txt");

struct excuse0{
char origine[100];
char word[70][20];
int numofkey,numofword;
};
char keyword[20][20];
excuse0 excuse[20];

int cmp(const void* a,const void * b){
return (*(excuse0*)b).numofkey - (*(excuse0*)a).numofkey;
}
int getkeyword(char (* keyword)[20],excuse0 excuse,int k){
int num=0;
for(int i=0;i<k;i++){
for(int j=0;j<excuse.numofword;j++){
if(strcmp(keyword[i],excuse.word[j])==0) num++;
}
}
return num;
}

void reverse(char * word){
for(int i=0;i<strlen(word);i++){
word[i]=tolower(word[i]);
}
}

int main()
{
int k,e,numofset=0;
char temp[100];
while(fin>>k>>e){
numofset++;
for(int i=0;i<k;i++){
fin>>keyword[i];
}
fin.getline(temp,100);
for(int i=0;i<e;i++){
fin.getline(temp,100);
strcpy(excuse[i].origine,temp);
//	strlwr(temp);
excuse[i].numofkey=excuse[i].numofword=0;
int j,m;
for(j=0;j<strlen(temp);j++){
if(isalpha(temp[j])){
for(m=j;m<strlen(temp);m++){
if(!isalpha(temp[m])) break;
}
strncpy(excuse[i].word[excuse[i].numofword],temp+j,m-j);
excuse[i].word[excuse[i].numofword][m-j]='\0';
excuse[i].numofword++;
}
}
//*
for(j=0;j<excuse[i].numofword;j++){
reverse(excuse[i].word[j]);
}//*/
}

for(int i=0;i<e;i++){
excuse[i].numofkey=getkeyword(keyword,excuse[i],k);
}

qsort(excuse,e,sizeof(excuse[0]),cmp);
int max=excuse[0].numofkey;
fout<<"Excuse Set #"<<numofset<<endl;
for(int i=0;i<e;i++){
if(excuse[i].numofkey<max) break;
fout<<excuse[i].origine<<endl;
}
fout<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: