PTA题目 串的模式匹配

题目小练习 专栏收录该内容
18 篇文章 0 订阅

问题描述:

给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。

本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:

数据0:小规模字符串,测试基本正确性;
数据1:随机数据,String 长度为 10^​5,Pattern 长度为 10;
数据2:随机数据,String 长度为 10^​​5 ,
Pattern 长度为 10^2;
数据3:随机数据,String 长度为 10^​5,
Pattern 长度为 10^​3 ;
数据4:随机数据,String 长度为 10^​5,
​​ Pattern 长度为 10^4;
数据5:String 长度为 10^​6,
​​ Pattern 长度为 10^5,
测试尾字符不匹配的情形;
数据6:String 长度为 10^6,
​​ Pattern 长度为 10^5,
​​ 测试首字符不匹配的情形。

输入格式:

输入第一行给出 String,为由英文字母组成的、长度不超过 10^​6的字符串。第二行给出一个正整数 N(≤10),为待匹配的模式串的个数。随后 N 行,每行给出一个 Pattern,为由英文字母组成的、长度
不超过 10^5的字符串。每个字符串都非空,以回车结束。

输出格式:

对每个 Pattern,按照题面要求输出匹配结果。

输入样例:

abcabcabcabcacabxy
3
abcabcacab
cabcabcd
abcabcabcabcacabxyz

输出样例:

abcabcacabxy
Not Found
Not Found

试题分析:

这题目的中,我们可以引用C的库函数strstr(string1,string2) 。该函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。

注意:
功能:strstr返回一个指针,指向string2在string1中首次出现的位置。
返回类型:字符串类型
传入参数:参数一、参数二都是字符串类型
分析:由于strstr函数返回的是一个字符串,而且是一个指针,所以我们需要用一个char类型的指针来接收该函数的返回值,比如 char *p; p=strstr(String1,String2);

实例代码:

#include<iostream>
#include<cstdio> 
#include<cstring>
using namespace std;
int main(){
	char String[1000001];
	cin>>String;
	int N;
	cin>>N;
	char Pattern[10][100001];                  
	char *p;                                   //定义一个char类型的指针,来接收strstr()的结果 
	for(int i=0;i<N;i++){
		cin>>Pattern[i];
	}
	string  Output[10];                        //用来接收结果,以供输出
	//错误示范:char Output[10][100001];       //这里一定要用string的数组,否则赋值“Not Found”的时候赋值不上,因为Not Found是一个固定长度的字符串,不能复制到char类型的数组 
	for(int i=0;i<N;i++){
		p=strstr(String,Pattern[i]);
		if(p==NULL){
			Output[i]="Not Found";
		}
		else{
			Output[i]=p;
		}
	}
	for(int j=0;j<N;j++){
		cout<<Output[j]<<endl;
	}
	return 0;
}

本期分享到这里就结束啦,大家如果对小编的代码有疑问或者想要小编做其他的程序,都欢迎来私信小编呀!

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值