CCF201409-3 字符串匹配

Posted syq816

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

以上是关于CCF201409-3 字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

CCF - 201409-3 - 字符串匹配

ccf 201409-3 字符串匹配(toupper,tolower)

CCF 201409-3 字符串匹配 100分

CCF201409-3字符串匹配(KMP)

CCF_ 201409-3_字符串匹配

CCF 201409-3 字符串匹配