• CCF201409-3 字符串匹配


    问题描述
      给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;
    当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 输入格式   输入的第一行包含一个字符串S,由大小写英文字母组成。   第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。   第三行包含一个整数n,表示给出的文字的行数。   接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。 输出格式   输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。 样例输入 Hello 1 5 HelloWorld HiHiHelloHiHi GrepIsAGreatTool HELLO HELLOisNOTHello 样例输出 HelloWorld HiHiHelloHiHi HELLOisNOTHello 样例说明   在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。 评测用例规模与约定   1
    <=n<=100,每个字符串的长度不超过100。

    解题思路:用到了string的find()方法,因为规定字符串长度不会超过100,所以string 的find()函数查找的返回值不会超过100,超过100就是查找失败,基于这样的大思路。

    我们来捋一下,首先大小写敏感的情况的话就不用说了,直接查找就可以了。

    大小写不敏感的话我们可以把两个字符串全部转成小写(大写转小写+32,小写转大写-32,别问为什么,问就是去看ASCII码表),再查找就可以了,思路很简单,代码量也少。

    这个题作为CCF第三题还挺简单,首先题目简洁好评哈哈哈哈。

    贴一下一代码:

    #include<iostream>
    #include<string>
    
    using namespace std;
    /*
        str2为待匹配字符串,str1为模式串,不区分大小写判断是否存在匹配
    */
    bool match(string str1, string str2) {
        //先将两个字符串中的字母全部化为小写
        for (int i = 0; i < str1.size(); i++) {
            if (str1[i] >= 'A'&&str1[i] <= 'Z') {
                str1[i] = str1[i] + 32;
            }
        }
        for (int i = 0; i < str2.size(); i++) {
            if (str2[i] >= 'A'&&str2[i] <= 'Z') str2[i] = str2[i] + 32;
        }
        //在第二个字符串中查找有没有匹配元素
        string::size_type n = str2.find(str1, 0);
        //cout << str1 << "   " << str2 << "   " << n << endl;
        if (n < 100) return true;
        return false;
    }
    int main() {
        string str;
        cin >> str;
        int flag;//大小写是否敏感标识,1标识敏感,0标识不敏感
        int n;//有几个待匹配字符串
        cin >> flag >> n;
        string pstr;//待匹配字符串
        for (int i = 0; i < n; i++) {
            cin >> pstr;
            if (flag) {
                //大小写敏感
                string::size_type n = pstr.find(str,0);
                if (n < 100) cout << pstr << endl;
            }
            else {
                //大小写不敏感
                if (match(str, pstr)) cout << pstr << endl;
            }
        }
        system("pause");
        return 0;
    }
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    Oracle面试题目及解答
    java -jar Incompatible argument to function
    plsql 查询到别的用户下面的表
    redis数据类型[string 、list 、 set 、sorted set 、hash]
    redis-cli 常用命令
    js判断浏览器,包括Edge浏览器
    HTMl5的sessionStorage和localStorage
    JS实现密码加密
    sprintf.js
    js-crc32
  • 原文地址:https://www.cnblogs.com/syq816/p/12369419.html
Copyright © 2020-2023  润新知