C语言,普及-,80分,求助,代码里有注释,感谢
查看原帖
C语言,普及-,80分,求助,代码里有注释,感谢
552724
printfscanf_楼主2022/4/1 11:21

我补了很多注释,求大佬告诉我哪里错了,以及怎么改,万分感谢,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;
}

2022/4/1 11:21
加载中...