⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 search_word.cpp

📁 从字母表2中搜索字母表1中的单词,可以按行,列,斜线进行直线搜索
💻 CPP
字号:
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

void Read_data(char a[10][10],char b[6][10])
{
	int i=0,j=0;
	char ch;
	
	FILE *fp1,*fp2;

	if((fp1 = fopen("字谜游戏表1.txt", "r")) == NULL) //打开文件
    { 
        printf("Can't open file\n"); 
        exit(0);; 
    } 

	ch = fgetc(fp1);         //先读取一个字符,以避免ch未初始化而出现问题

    while(ch!=EOF)
	{
        if( ch>64 && ch<91 )    //isalpha判断ch是否为字母,不是返回0,是返回1
		{
			a[i][j]=ch;
			if(j==9)
			{
				i++;  j=0;
			}
			else
				j++;
		}

        ch = fgetc(fp1);
	}

    fclose(fp1);

    i=0;j=0;

	if((fp2 = fopen("字母表2.txt", "r")) == NULL) //打开文件
    { 
        printf("Can't open file\n"); 
        exit(0);; 
    }
    for(i=0;i<6;i++)
	{
       fscanf(fp2,"%s",b[i]);
	}

    fclose(fp2);
}


void find(char a[10][10],char b[6][10],int c[6][4])
{
    int i,j,k,l,p,q,r;

	for(i=0;i<10;i++)
    for(j=0;j<10;j++)
	{
		for(k=0;k<6;k++)
		{   
			if(a[i][j]==b[k][0])
			{ 
			    l = strlen(b[k]);


			    for(p=j,q=0;l<=10-j && q<l; p++,q++) //向右
				{   
				    if(a[i][p]!=b[k][q])
						break;
				}

			    if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=i+1;c[k][3]=p;break;}

				for(p=j,q=0;l<=j+1 && q<l; p--,q++) //向左
				{   
				    if(a[i][p]!=b[k][q])
						break;
				}
				if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=i+1;c[k][3]=p+2;break;}

				for(p=i,q=0;l<=10-i && q<l; p++,q++) //向下
				{   
				    if(a[p][j]!=b[k][q])
						break;
				}
				if(q==l)
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=p;c[k][3]=j+1;break;}

				for(p=i,q=0;l<=i+1 && q<l; p++,q++) //向上
				{   
				    if(a[p][j]!=b[k][q])
						break;
				}
				if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=p+2;c[k][3]=j+1;break;}

				for(p=i,r=j,q=0;l<=10-i && l<=10-j && q<l; p++,r++,q++) //向右下
				{   
				    if(a[p][r]!=b[k][q])
						break;
				}
				if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=p;c[k][3]=r;break;}

				for(p=i,r=j,q=0;l<=i+1 && l<=10-j && q<l; p--,r++,q++) //向右上
				{   
				    if(a[p][r]!=b[k][q])
						break;
				}
				if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=p+2;c[k][3]=r;break;}

				for(p=i,r=j,q=0;l<=10-i && l<=j+1 && q<l; p++,r--,q++) //向左下
				{   
				    if(a[p][r]!=b[k][q])
						break;
				}
				if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=p;c[k][3]=r+2;break;}

				for(p=i,r=j,q=0;l<=i+1 && l<=j+1 && q<l; p--,r--,q++) //向左上
				{   
				    if(a[p][r]!=b[k][q])
						break;
				}
				if(q==l) 
				{c[k][0]=i+1;c[k][1]=j+1;c[k][2]=p+2;c[k][3]=r+2;break;}
			}
		}
	}
}


void report(char b[10][10],int c[6][4])
{
	int k;
	for(k=0;k<6;k++)
	{
        printf("%d,%d,%d,%d\n",c[k][0],c[k][1],c[k][2],c[k][3]);
	}
}


void main()
{
    char a[10][10],b[6][10];
	int c[6][4];
	clock_t t; 
    double beginning_time, finish_time; 
	int i,j,k;

	t = clock(); 
	beginning_time = (double)t / (double)CLOCKS_PER_SEC; /* 转换成秒 */ 

	Read_data(a,b);

	find(a,b,c);
     
	report(b,c);

    t = clock(); 
	finish_time = (double)t / (double)CLOCKS_PER_SEC; /* 转换成秒 */ 

    printf("循环共用了 %g 秒\n", finish_time - beginning_time); 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -