19:字串移位包含問題
描述
對于一個字串來說,定義一次回圈移位操作為:將字串的第一個字符移動到末尾形成新的字串。
給定兩個字串s1和s2,要求判定其中一個字串是否是另一字串通過若干次回圈移位后的新字串的子串。例如CDAA是由AABCD兩次移位后產生的新串BCDAA的子串,而ABCD與ACBD則不能通過多次移位來得到其中一個字串是新串的子串。
輸入
一行,包含兩個字串,中間由單個空格隔開。字串只包含字母和數字,長度不超過30。
輸出
如果一個字串是另一字串通過若干次回圈移位產生的新串的子串,則輸出true,否則輸出false。
樣例輸入
AABCD CDAA
樣例輸出
true
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
char a[35], b[35];
cin >> a >> b;
int len1 = strlen(a);
int len2 = strlen(b);
int flag = 0;
if (len1 >= len2)
{
for (int i = 0; i < len1; i++) {
char temp = a[0];
for (int j = 0; j < len1; j++) {
if (j == len1 - 1)
a[j] = temp;
else
a[j] = a[j + 1];
}
for (int m = 0; m < len1; m++) {
if (b[0] == a[m])
{
for (int n = 0; n < len2; n++, m++) {
if (b[n] = a[m])
{
flag = 1;
continue;
}
else
{
flag = 0;
break;
}
}
}
}
if (flag == 1)
{
cout << "true";
return 0;
}
}
}
else if (len1 < len2)
{
for (int i = 0; i < len2; i++) {
char temp = b[0];
for (int j = 0; j < len1; j++) {
if (j == len1 - 1)
b[j] = temp;
else
b[j] = b[j + 1];
}
for (int m = 0; m < len1; m++) {
if (a[0] == b[m])
{
for (int n = 0; n < len2; n++, m++) {
if (a[n] = b[m])
{
flag = 1;
continue;
}
else
{
flag = 0;
break;
}
}
}
}
if (flag == 1)
{
cout << "true";
return 0;
}
}
}
cout << "false";
return 0;
}
uj5u.com熱心網友回復:
你多輸入幾個例子看看,肯定就不行了uj5u.com熱心網友回復:
#include <iostream>
#include <string>
int main()
{
std::string a, b;
int p;
while (std::cin >> a >> b, !a.empty() || !std::cin.eof())
{
for (p = 0, a += a; p < a.size(); p++)
if (a.find(b, p) != std::string::npos)
{
std::cout << "true" << std::endl;
break;
}
if (p == a.size()) std::cout << "false" << std::endl;
a.clear();
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24074.html
標籤:C++ 語言
上一篇:老哥們,Visual Studio除錯時我想進入printf里面去看,怎么設定呢
下一篇:求大佬幫忙
