uva_10010

话说10010是联通的客服电话。。这道题就是一个基础的字符串匹配,最后格式输出不正确总是we,郁闷,还好在睡觉前A了

该睡了,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char tbs[56][56];
char ts[56];
int m, n;
int a, b;

int chr_s(char* s, int bg, int en){
    int i, j, len;
    int lens = strlen(s);
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        j++;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        i++;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        i++;
        j++;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        i--;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        j--;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        i--;
        j--;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        i++;
        j--;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    
    len = 0; i = bg; j = en;
    while(s[len] == tbs[i][j] && tbs[i][j]){
        len++;
        i--;
        j++;
    }
    if(len == lens){
        if(bg < a){
            a = bg;
            b = en;
        }
        else if(bg == a){
            if(en < b){
                a = bg;
                b = en;
            }
        }
    }
    return 0;
}

int tosh(char* s){
    int i, j;
    for(i = 1; i <= m; ++i){
        for(j = 1; j <= n; ++j){
            if(tbs[i][j] == s[0]) {
                chr_s(s, i, j);
            }
        }
    }
    return 0;
}

int main(){
    int k;
    int ti;
    int i, j;
    int tag = 0;
    scanf("%d", &ti);
    while(ti--){
        if(tag == 0) tag = 1;
        else printf("\n");
        memset(tbs, 0, sizeof(tbs));
        memset(ts, 0, sizeof(ts));
        scanf("%d%d", &m, &n);
        
        for(i = 1; i <= m; i++){
            getchar();
            for(j = 1; j <= n; j++){
                scanf("%c", &tbs[i][j]);
                if(tbs[i][j] >= 'A' && tbs[i][j] <='Z')
                    tbs[i][j] = tbs[i][j] - 'A' + 'a';
            }
        }

        scanf("%d", &k);
        for(i = 0; i < k; ++i){
            a = 100;
            b = 100;
            scanf("%s", ts);
            for(j = 0; j < strlen(ts); ++j){
                if(ts[j] >= 'A' && ts[j] <='Z')
                    ts[j] = ts[j] - 'A' + 'a';
            }
            tosh(ts);
            printf("%d %d\n", a, b);
        }
    }
    
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值