1. 程式人生 > >字串移位包含問題(水~)

字串移位包含問題(水~)

字串移位包含問題

描述

對於一個字串來說,定義一次迴圈移位操作為:將字串的第一個字元移動到末尾形成新的字串。

給定兩個字串s1和s2,要求判定其中一個字串是否是另一字串通過若干次迴圈移位後的新字串的子串。例如CDAA是由AABCD兩次移位後產生的新串BCDAA的子串,而ABCD與ACBD則不能通過多次移位來得到其中一個字串是新串的子串。

輸入

一行,包含兩個字串,中間由單個空格隔開。字串只包含字母和數字,長度不超過30。

輸出

如果一個字串是另一字串通過若干次迴圈移位產生的新串的子串,則輸出true,否則輸出false。

樣例輸入

AABCD CDAA

樣例輸出

true

AC程式碼:(主要考察strcat,strcpy,strstr三個函式的應用)

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=70;
int main()
{
    char s1[maxn],s2[maxn],t[maxn];
    scanf("%s%s",s1,s2);
    if(strlen(s1)<strlen(s2))       
    {
        strcpy(t,s1);
        strcpy(s1,s2);              //將s1字串始終作為大的
        strcpy(s2,t);
    }
    strcpy(t,s1);                       
    if(strstr(strcat(s1,t),s2)!=NULL)   //strstr函式判斷s2是否為s1+s1的子串
    {
        cout<<"true";
    }
    else cout<<"false";
    return 0;
}