我补了很多注释,求大佬告诉我哪里错了,以及怎么改,万分感谢,5点和8点没过
#include <stdio.h>
#include <string.h>
void mstrlwr(char *a)//转小写函数
{
int len = strlen(a);
int i;
for(i=0 ; i<len; i++)
{
if( (a[i]>='A') && (a[i]<='Z') )
{
a[i] -= 'A'-'a';
}
}
return;
}
int main()
{
char*p;
char *t;
char z[15];
char tch[16];
int diyi=100000000;
int len,lenw;
int sum = 0;
char wen[1000010];
int flag=1;
int i,j;
gets(z);//读取信息
gets(wen);
mstrlwr(z);//全转小写
mstrlwr(wen);
len = strlen(z);
lenw = strlen(wen);
//找完全一样的单词相当于找" 单词 ",但是第一个单词和最后一个单词可能没有空格,进行判断
for(i=lenw-len,j=0;i<lenw;i++,j++)//最后一块可能没有空格,倒着对比
{
if(wen[i]!=z[j]) flag=0;//不一样
}
if(flag)//倒着找,是这个单词要加一
{
sum++;
diyi=&wen[lenw-len]-wen;//这一次出现的位置是第一位地址和单词的第一位地址差,如果这不是第一个,后面再改
}
//正着找,看有没有空格
strcat(z," ");//要保证后面有空格才是一个单词
p = strstr(wen,z);
if((p!=NULL) && (p==wen))//找到的如果是第一个再加,如果不是第一个即如果是 " 单词 "后面会判断,或者是*+单词也不能加
{
sum++;
diyi=0;//第一次出现位置在0,这一定是第一次后面要特殊判断一下
}
tch[0]=' ';//用tch的空格和原单词拼接
tch[1]='\0';//不加'\0'strcat会出错
strcat(tch,z);//使字符串变为" 单词 "
len = strlen(tch);//获取长度,每次找到一个要跳过去
p = strstr(wen,tch);//先找一次,需要与之前找到的做对比
if(p!=NULL)//找到一个
{
if(p!=&wen[diyi]) sum++;//如果和之前找的都不一样再加一
if(p-wen<diyi) diyi = p-wen+1;//如果前面两次正着找找到,只有这次比找到的小第一次才是这个,如果前面没找到diyi初始化的值为100000000(比数据最大值大),地址一定比他小
t = p;//找到的这个存一下(我也不知道不用这个有没有影响)
p = strstr(t+len,tch);//找的时候要把上次找到的跳过去,即找到的单词地址加上单词的地址
while(p!=NULL)
{
t = p;
sum++;
p = strstr(t+len,tch);//原理同上
}
}
if(sum==0)
{
printf("-1");
}
else
{
printf("%d %d",sum,diyi);
}
return 0;
}