给你一个字符串A和一个字符串B,请你计算字符串B的所有旋转模式在字符串A中的呈现总次数。
阐明:
如果将字符串B形容成B1B2...Bm的模式(m是B的长度),那么B1B2...Bm-1Bm,B2B3...BmB1,...,BmB1...Bm-2Bm-1就是字符串B的所有旋转模式。
输出
输出蕴含多组测试数据。每组输出为两行,第一行输出字符串A,第二行输出字符串B。A的长度不超过1000,B的长度不超过100,所有字符串仅蕴含小写字母。
输入
对于每组输出,输入字符串B的所有旋转模式在字符串A中的呈现总次数。
样例输出 Copy
abab
ab
aaaa
a
aaaa
aa
样例输入 Copy
3
4
3

代码示例(本人写的,只能过平台,不完满)

//#include<iostream>//#include<string>//#include<string.h>//#include<cstring>//using namespace std;//void Find(int i, int n, string &s1,string &s3);//void change(string &s);////int main() {//    string s1,s2 = "",s3 = "";//    while(getline(cin,s1)) {//        cin >> s2;//        getchar();////        s3.resize(101);//        int n = s2.length();//        int k,cnt = 0;//        for(int i = 0; (i + n - 1) < s1.length(); i++) {//            k = 0;//管制while循环次数,change一遍后break,要不会有限循环!每次i变动后置零//            Find(i,n,s1,s3);//利用函数Find()提取s1[]中的子串赋给s3[]////            cout << s3 << endl; 调试用////            while(strcmp(s2.c_str(),s3.c_str()) != 0){//            while(s2 != s3) {//                change(s2);//该函数使短串变换,并让每次变换后的s2持续与S3进行比拟,看是否相等//                k++;//记录翻转次数//                if(k >= n) { //管制change次数,change一轮后退出,不要有限循环//                    break;//                }//            }////            if(strcmp(s2.c_str(),s3.c_str()) == 0){//两者相等,则呈现一次//            if(s2 == s3) {//                cnt++; //计数//            }//            s3.clear();//每次i变换即进行过一次Find函数都要把s3重置,以从新获取s1的子串。//        }//        cout << cnt << endl;//    }//    return 0;//}//void Find(int i,int n, string &s1,string &s3) { //此处需将i和n的值都传入函数//    int k,l;//    for(k = i,l = 0; k < i + n; k++,l++) { //因为在一次接管输出后n不变,而i在for循环中为了管制s1(即长串) 不超限在递增//        //故引入k使得k < i +n(而不是间接k < n),则每次循环也可循环n次,给s3[]赋值n次,与将要比照的s2[]长度相等//        s3 += s1[k];//当i = 0时,使得s1得前n个字符(从s[i]开始)赋值给s3 ,前面需随着i变动同理提取长串中的相邻字符(引入i的起因)////        s3[l] = s1[k]; //切记这么赋值是谬误的,尽管能够提前开拓s3的空间(下面的s3.resize()),然而会多一个空行//    }//}////void change(string &s) { //在while循环中会不停调用此函数不停变换短串s2//    char t;//    int i;//    t = s[0];//用哨兵暂存储第一个字符//    for(i = 0; i < s.length() - 1; i++) { //不要超界//        s[i] = s[i + 1];//将前面的字符赋值给后面,不停实现轮换以测验变换后的多个s2......是否会在s1中呈现//    }//    s[i] = t;//将哨兵中的字符赋值给字符串最初一个地位//}

//#include<iostream>//#include<string>//#include<string.h>//#include<cstring>//using namespace std;//void Find(int i, int n, char s1[],char s3[]); //void change(char s[]);////int main(){//    char s1[1001],s2[101],s3[101];//s1长串,s2短串,s3为提取是s1子串 //    while(scanf("%s",s1) != EOF){//        scanf("%s",s2);//        int n = strlen(s2);//        int k,cnt = 0;//        for(int i = 0; (i + n - 1) < strlen(s1); i++){//            k = 0;//管制while循环次数,change一遍后break,要不会有限循环!每次i变动后k置零 //            Find(i,n,s1,s3);//利用函数Find()提取s1[]中的子串赋给s3[] //            while(strcmp(s2,s3) != 0){//                change(s2);//该函数使短串翻转,并让每次翻转后的s2持续与S3进行比拟,看是否相等 //                k++;//记录翻转次数 //                if(k >= n){//管制change次数,change一轮后退出,不要有限循环 //                    break;//                } //            }//            if(strcmp(s2,s3) == 0){//两者相等,则呈现一次 //                cnt++; //            }    //        }//        cout << cnt << endl;//    }//    return 0;//}//void Find(int i, int n, char s1[],char s3[]){//此处需将i和n的值都传入函数 //    int l,k;//    for(k = i,l = 0; k < i + n; l++,k++){//因为在一次接管输出后n不变,而i在for循环中为了管制s1(即长串) 不超限在递增//    //故引入k使得k < i +n(而不是间接k < n),则每次循环也可循环n次,给s3[]赋值n次,与将要比照的s2[]长度相等 //        s3[l] = s1[k];//当i = 0时,使得s1得前n个字符(从s[i]开始)赋值给s3 ,前面需随着i变动同理提取长串中的相邻字符(引入i的起因) //    } //    s3[l] = '\0';//最初一个字符增加完结字符'\0'    //}////void change(char s[]){//在while循环中会不停调用此函数不停变换短串s2 //    char t;//    int i;//    t = s[0];//用哨兵暂存储第一个字符 //    for(i = 0; i < strlen(s) - 1; i++){ //        s[i] = s[i + 1];//将前面的字符赋值给后面,不停实现轮换以测验变换后的多个s2......是否会在s1中呈现 //    }//    s[i] = t;//将哨兵中的字符赋值给字符串最初一个地位 ('\0'之前) //}