【hdu2203】親和串——用strstr的字符串匹配

題目:

親和串

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11337    Accepted Submission(s): 5120


Problem Description
人隨着歲數的增長是越大越聰明還是越大越笨,這是一個值得全世界科學家思考的問題,同樣的問題Eddy也一直在思考,因爲他在很小的時候就知道親和串如何判斷了,但是發現,現在長大了卻不知道怎麼去判斷親和串了,於是他只好又再一次來請教聰明且樂於助人的你來解決這個問題。
親和串的定義是這樣的:給定兩個字符串s1和s2,如果能通過s1循環移位,使s2包含在s1中,那麼我們就說s2 是s1的親和串。
 

Input
本題有多組測試數據,每組數據的第一行包含輸入字符串s1,第二行包含輸入字符串s2,s1與s2的長度均小於100000。
 

Output
如果s2是s1的親和串,則輸出"yes",反之,輸出"no"。每組測試的輸出佔一行。
 

Sample Input
AABCD CDAA ASD ASDF
 

Sample Output
yes no
 

Author
Eddy

描述:如題面

題解:strstr(str1,str2) 函數用於判斷字符串str2是否是str1的子串。如果是,則該函數返回str2在str1中首次出現的地址;否則,返回NULL。

代碼:

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
#define M 100000
char s1[M],s2[M],s3[2*M];
int main()
{
	while(cin>>s1)
	{
		cin>>s2;
		char *p;
		int i,len=strlen(s1);
		strcpy(s3,s1);
		for(i=len;i<2*len;++i)
		s3[i]=s1[i-len];
		p=strstr(s3,s2);
		if(p) cout<<"yes"<<endl;
		else  cout<<"no"<<endl;
		memset(s1,0,sizeof(s1));
		memset(s2,0,sizeof(s2));
		memset(s3,0,sizeof(s3));
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章