📄 search_word.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 + -