字符串-409 - Excuses, Excuses!

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

解题过程: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;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值