#8790. CCF201409-3 字符串匹配(100分)【文本处理】
CCF201409-3 字符串匹配(100分)【文本处理】
Background
问题描述
给出一个字符串和多行文字,
在这些文字中找到字符串出现的那些行。
你的程序还需支持大小写敏感选项:
当选项打开时,表示同一个字母的大写和小写看作不同的字符;
当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入格式
输入的第一行包含一个字符串S,由大小写英文字母组成。
第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,
当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字的行数。
接下来n行,
每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。
输出格式
输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。
样例输入
Hello 1 5 HelloWorld HiHiHelloHiHi GrepIsAGreatTool HELLO HELLOisNOTHello
样例输出
HelloWorld HiHiHelloHiHi HELLOisNOTHello
样例说明
在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。 评测用例规模与约定 1<=n<=100,每个字符串的长度不超过100。
问题简述:(略)
问题分析:
重写解题博客以及解题程序代码(参见参考链接),解题代码更加简洁,增加正则表达式题解等。
方法一:用C语言库函数来解决
C语言库函数strlwr()实现了字符串匹配的功能,其他处理也用函数实现,用函数strlwr()实现大写转小写,用函数strcpy()实现字符串复制。 需要说明的是,程序第21行for语句用了C++的语法,编译程序可以通过。
方法二:用C++的string类来解决
string类有方法find()实现了字符串匹配的功能。
方法三:用KMP算法来解决
这种做法需要自己写KMP算法实现程序。
方法四:用C++的正则表达式来解决
这里用C++的正则表达式来实现,似乎也可以用C的正则表达式来实现。
方法五:用Python的正则表达式来解决
这个似乎更加简单并且易于实现。
方法六:用Java的正则表达式来解决
Java的正则表达式包是regex。
Limitation
1s, 1024KiB for each test case.