我的代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;
//此题得分50分
int main(){
int doc,choose,row=-1;
int i,j,k;
char str1[105][85]={0},c;
char str2[15][85]={0};
char temp[85];
int value=0;
int mark[105]={0},p=0,result[105];
char *tear,tear_num=0,part=0;
// freopen("aaa.txt","r",stdin);
scanf("%d %d",&doc,&choose);
c=getchar();
for(i=0;i<doc;i++){
gets(str1[i]);
}
for(j=0;j<choose;j++){
gets(str2[j]);
}
for(i=0;i<choose;i++){
value=0;
p=0;
for(j=0;j<doc;j++){
if(strstr(str1[j],str2[i])!=NULL){
value++;
mark[p++]=j+1;
}
}
if(value!=0){
printf("%d",value);
for(k=0;k<value;k++){
printf(" %d",mark[k]);
}
}else if(value==0){
//此处存在两种情况
strcpy(temp,str2[i]);
tear_num=0;
tear=strtok(str2[i]," ");
while(tear!=NULL){
tear_num++;
tear=strtok(NULL," ");
}
if(tear_num==1){
printf("%d",value);
}else if(tear_num>=1){
// printf("%d",value);
// printf("%d",tear_num);
// printf("%s ",temp);
row=-1;
tear=strtok(temp," ");
part=0;
value=0;
p=0;
while(tear!=NULL){
part++;
for(j=0;j<doc;j++){
if(strstr(str1[j],tear)!=NULL){
if((j+1)>row && part!=tear_num){
row=j+1;
break;
//printf("row=%d\n",row);
}else if((j+1)>row && part==tear_num){
value++;
// printf(" %d",j+1);
result[p++]=j+1;
}
}
}
tear=strtok(NULL," ");
}
printf("%d",value);
for(k=0;k<p;k++){
printf(" %d",result[k]);
}
}
}
printf("\n");
}
return 0;
}