题目大意:在一段文字中找到所要找的字符串的起始位置,然后进行输出
解题思路:通过八个方向的比较就可以得到结果
感想:要注意规范,不然找个错误很麻烦,还要注意变量的值
#include<cstdio>
#include<cstring>
int main() {
char str[100][100];
int test;
scanf("%d\n\n", &test);// 测试次数
while(test--) {
int row, line;
scanf("%d%d", &row, &line);//行 列
getchar();
memset(str,'\0',sizeof(str));
for(int i = 0; i < row; i++)
gets(str[i]);
//行列赋值
int num ;
scanf("%d", &num);
getchar();
for(int i = 0; i < row; i++)
for(int j = 0; j < line; j++) {
if(str[i][j] >= 'A' && str[i][j] <= 'Z')
str[i][j] = str[i][j] + 32;
}//大写转换成小写
char temp[100];
for(int i = 0; i < num; i++) {
memset(temp,'\0',sizeof(temp));
gets(temp);
int len = strlen(temp);
for(int j = 0; j < len; j++)
if(temp[j] >= 'A' && temp[j] <= 'Z')
temp[j] = temp[j] + 32;//大写转换成小写
int mark = 0;
for(int j = 0; j < row; j++) {
for(int k = 0; k < line; k++)
if(str[j][k] == temp[0])
{
int l, m, n;
if(k + 1 >= len ) { //left
for(l = 0, m = k; l < len; l++ , m--) {
if(str[j][m] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if(line - k + 1 >= len ) {//right
for(l = 0, m = k; l < len; l++ , m++) {
if(str[j][m] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if(j + 1 >= len) {//up
for(l = 0, m = j; l < len; l++ , m--) {
if(str[m][k] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if(row - j + 1 >= len) {//down
for(l = 0, m = j; l < len; l++ , m++) {
if(str[m][k] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if(k + 1 >= len && j + 1 >= len) {//left up
for(l = 0, m = j, n = k; l < len; l++ , m--, n--) {
if(str[m][n] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if( j + 1 >= len && line - k + 1 >= len) {//r u
for(l = 0, m = j, n = k; l < len; l++ , m--, n++) {
if(str[m][n] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if(row - j + 1 >= len && k + 1 >= len) {//d l
for(l = 0, m = j, n = k; l < len; l++ , m++, n--) {
if(str[m][n] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
if(row - j + 1 >= len && line - k + 1 >= len) {
for(l = 0, m = j, n = k; l < len; l++ , m++, n++) {
if(str[m][n] != temp[l])
break;
}
if(l == len) {
printf("%d %d\n",j+1 , k+1);
mark++;
break;
}
}
}
if(mark == 1)
break;
}
}
if(test)
printf("\n");
}
return 0;
}