字符串搜索

本文介绍了一种在二维字符数组中查找特定字符串的算法,通过遍历数组找到目标字符串的首字符,再沿八个方向搜索匹配整个字符串,实现精准定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
using namespace std ;

char grid[100][100] , word[100] ;
int n , m ;

int x[] = {-1 , -1 , -1 , 0 , 0 , 1 , 1 , 1} ;
int y[] = {-1 , 0 , 1 , -1 , 1 , -1 , 0 , 1} ;

int xx , yy ;

void Search()	{
	int len = strlen(word) , k ;
	for( int i = 0 ; i < n ; i++ )	
		for(int j = 0 ; j < m ; j++ )	{	
			if(grid[i][j] == word[0])	{
				for(int ii = 0 ; ii < 8 ; ii++)	{
					xx = i , yy = j ;
					for( k = 1 ; k < len ; k++)	{
						xx = xx+x[ii] ;
						yy = yy+y[ii] ;
						if(xx < 0 || xx >= n || yy < 0 || yy >= m )
							break ;
						if(grid[xx][yy] != word[k])
							break ;
					}
					if(k == len)	{
						xx = i , yy = j ;
						return ;
					}
				}
			}
		}
}


int main()	{
	int N ;
	cin >> N ;
	int t = 0 ;
	while(N--)	{
		if(t)
		 printf("\n");
		t = 1 ;
		cin >> n >> m ;
		int i , j , k ;
		for(i = 0 ; i < n ; i++)	{
			for(j = 0 ; j < m ; j++)	{
				char c ;
				cin >> c ;
				if(c >= 'A' && c <= 'Z')
					c += 32 ;
				grid[i][j] = c ;
			}
		}
		int t ;
		cin >> t ;
		for(i = 0 ; i < t ; i++)	{
			cin >> word ;
			for(j = 0 ; j < strlen(word) ; j++)	{
				if(word[j] >= 'A' && word[j] <= 'Z')	
					word[j] += 32 ;
			}
			Search() ;
			cout << xx + 1 << " " << yy + 1 << endl ;
		}
	}
	return 0 ;
}

			

 

在二维数组中存入字符,然后再输入一个字符串,在二维数组中查找字符串;

中间犯了一个错误,以为简单的BFS,其实不是这样的。

Process:

  首先在二维数组中找到字符串的首个字符,然后一直按照某个方向进行搜索,直到把整个字符串搜出来为止;

详细代码如下:

 

转载于:https://www.cnblogs.com/NYNU-ACM/p/4237461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值