uva10010

字符串的题可真是简直了。。。。【真是复杂。。主要是判断的情况多而且边界的判断可真是麻烦啊。。。或许或许有简单的方法吧。。】

给一个m*n的字元方块,可以从一个元素向上,向下,向左,向右,向左上,向右下,向左下,向右上八个方向进行搜索,输入给出的单词全部都可以通过该规则进行查找到,给出首字母的位置,题目重点应该在那个toupper上。。。。。题目说部分大小写,那就都变成大写的或者小写的叭

#include <cstdio>
#include <iostream>
#include <cctype>
using namespace std;
int n,m;
const int maxn=55;
char letter[maxn][maxn],word[maxn];
void f(int m,int n,int len)
{
    int i,j,k,a,b;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
    {
        if(letter[i][j]==word[0])
        {
            a=i;b=j;k=0;
            while(a>0&&letter[a-1][b]==word[k+1])//向上搜索
            {
                k++;
                a--;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(a<m-1&&letter[a+1][b]==word[k+1])//向下搜索
            {
                k++;
                a++;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(b>0&&letter[a][b-1]==word[k+1])//向左搜索
            {
                k++;
                b--;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(b<n-1&&letter[a][b+1]==word[k+1])//向右搜索
            {
                k++;
                b++;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(a>0&&b>0&&letter[a-1][b-1]==word[k+1])//向左上搜索
            {
                k++;
                a--;
                b--;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(a>0&&b<n-1&&letter[a-1][b+1]==word[k+1])//向右上搜索
            {
                k++;
                a--;
                b++;
            }
             if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(a<m-1&&b>0&&letter[a+1][b-1]==word[k+1])//向左下搜索
            {
                k++;
                a++;
                b--;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
            a=i;b=j;k=0;
            while(a<m-1&&b<n-1&&letter[a+1][b+1]==word[k+1])
            {
                k++;
                a++;
                b++;
            }
            if(k==len-1)//如果搜索到单词就结束
            {
                printf("%d %d\n",i+1,j+1);
                return;
            }
        }
    }
}
int main()
{
     int t,m,n,k,i,j;
    cin>>t;
    while(t--)
    {
        cin>>m>>n;
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                cin>>letter[i][j];
                letter[i][j]=toupper(letter[i][j]);
            }
        }
        cin>>k;
        for(i=0;i<k;i++)
        {
            cin>>word;
            for(j=0;word[j]!='\0';j++)
                word[j]=toupper(word[j]);
            f(m,n,j);
        }
        if(t!=0)
            cout<<endl;
    }

}
可真是对字符串的题无爱了。。。。。

微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值