2020-串作業

xiaosilence發表於2020-10-18

7-1 串的模式匹配

給定兩個由英文字母組成的字串 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

#include<iostream>
#include<cstring>
using namespace std;
typedef struct {
	char* ch;
	int length;
}HString;


int SubString(char*m, char*n)
{
	char *s;
	s=strstr(m,n);
	if(s==NULL)
	{
		cout<<"Not Found"<<endl;
		return 0;
	}
	else
	{
		cout<<s<<endl;
	}
	return 1;
}

int main()
{
	int x;
	char a[1000001],b[100001];
	cin>>a;
	cin >> x;
	for (int i = 0; i < x; i++)
	{
		cin>>b;
		SubString(a,b);
	}
	return 0;
}