【CCFCSP】201409-3 字符串匹配

试题编号: 201409-3
试题名称: 字符串匹配
时间限制: 1.0s
内存限制: 256.0MB

这是一道基础的字符串匹配问题,可以使用遍历的方法判断一字符串是否被另一字符串包含。这里把被判断字符串记作a,如果要判断a串是否在b串中,可以枚举b串中第一个和a匹配的位置,然后再判断是否a整个串都和b串的剩余字符匹配。
对于不区分大小写的情况,可以把a和b字符串都转换为小写形式,之后的判断与不区分大小写相同。

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
//a表示被判断串,b表示需要判断包含a的串
//a1,b1表示转化后的a和b串
char a[110], a1[110], b[110], b1[110];
using namespace std;
int main() {
    int n, len1, len2;
    bool s;
    cin >> a >> s >> n;
    len1 = strlen(a);
    while (n--) {
        memset(a1, 0, sizeof(a1));
        memset(b1, 0, sizeof(b1));
        for (int i = 0; i < len1; i++) {
            if (a[i] >= 'A'&&a[i] <= 'Z' && !s) {
                //如果不区分大小写且是大写字符,进行转化
                a1[i] = a[i] + 32;
            }
            else {
                //如果不区分大小写或本来就是小写字符,就不需要转化,直接复制
                a1[i] = a[i];
            }
        }
        cin >> b;
        len2 = strlen(b);
        if (len2 < len1) continue;
        for (int i = 0; i < len2; i++) {
            if (b[i] >= 'A'&&b[i] <= 'Z' && !s) {
                b1[i] = b[i] + 32;
            }
            else
                b1[i] = b[i];
        }
        //b串开始位置只需要判断到len2-len1(因为之后不可能匹配)
        for (int i = 0; i <= len2 - len1; i++) {
            bool flag = 0;
            //判断是否a整串都与b剩余的字符匹配
            for (int j = 0; j < len1; j++) {
                if (a1[j] != b1[i + j]) {
                    flag = 1;//flag=1表示匹配失败
                    break;
                }
            }
            if (!flag) {
                //如果匹配成功就输出原串
                cout << b << endl;
                break;
            }
        }

    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值