题目大意:在一段文字中找到所要找的字符串的起始位置,然后进行输出

解题思路:通过八个方向的比较就可以得到结果

感想:要注意规范,不然找个错误很麻烦,还要注意变量的值

#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;
}