Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

痛苦的wa!!!哪位高人能帮帮忙

Posted by hellocs at 2009-09-11 10:28:03 on Problem 1598
 同学们提到的注意的问题都注意到了,自己也试了n组数据都没问题,可还是wa
#include<iostream>
using namespace std;
bool isalphet(char);
int has(char *,char *);
int main()
{
	int m,n,i,j,max;
	char key[25][30];
	char execuse[25][80];
	int num[25];
	char ch;
	int count=1;
	while(cin>>m>>n)
	{
		max=0;
		for(i=0;i<m;i++)
		{
			cin>>key[i];//输入关键字
		}
		ch=getchar();
		for(i=0;i<n;i++)
		{
			gets(execuse[i]);num[i]=0;//输入句子
			for(j=0;j<m;j++)
			{
				num[i]+=has(key[j],execuse[i]);//计算每句话中含key的个数
			}
			if(num[i]>max) max=num[i];
		}
		cout<<"Execuse Set #"<<count<<endl;
		for(i=0;i<n;i++)
		{
			if(num[i]==max) cout<<execuse[i]<<endl;
		}
		count++;
	}
	system("pause");
	return 0;
}
//返回e2中匹配单词k2的个数
int has(char *k2,char *e2)
{
	int i,j,k,e,f;
	char ch;
	int num=0;
	k=0;f=0;while(!isalphet(e2[f])){f++;}//找到e2中是字母开始出现的位置
	e=f;//k是k2的指针,f是e2大循环的指针,e是e2小循环的指针
	while(f<=strlen(e2)-strlen(k2))
	{
		ch=tolower(e2[e]);
		if(k2[k]==ch){ k++;e++;}//相同则继续比较
		else{ k=0;//不同时k返回k2的起点准备重新比较
			f++;
			while(f!=0&&isalphet(e2[f])){ f++;}//跨过该字母串(因为不匹配),找到非字母的位置
			while(!isalphet(e2[f])&&f<=strlen(e2)-strlen(k2)){f++;}//找到下一组比较开始的字母的位置
			e=f;
			continue;}
		if(k==strlen(k2)){ 
			if(!isalphet(e2[e])){//比较结束匹配并且下一个字符不是字母,保证是一个单词,而不是单词的子串
			num++;}k=0;
			f++;
			while(f!=0&&isalphet(e2[f])){ f++;}
			while(!isalphet(e2[f])){f++;}
			e=f;
		}
	}
	return num;
}
//判断字符是否为字母
bool isalphet(char c)
{
	int temp;
	temp=c-'a';
	if(temp>=0&&temp<=26) return true;
	temp=c-'A';
	if(temp>=0&&temp<=26) return true;
	return false;
}		
		
		
		

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator