C++程序 检查一个字符串是否可以通过至多X次循环顺时针移位从另一个字符串形成
在C++中,实现判断一个字符串是否可以通过至多X次循环顺时针移位从另一个字符串形成的功能,可以通过以下步骤实现:
步骤1:获取输入的两个字符串
通过输入函数getline()
获取两个字符串,分别保存在str1
和str2
字符串变量中。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1, str2;
getline(cin, str1);
getline(cin, str2);
return 0;
}
步骤2:判断两个字符串长度是否相等
如果两个字符串长度不相等,则不可能通过移位形成。可以通过字符串变量的length()
函数获取字符串的长度,用if
语句判断长度是否相同。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1, str2;
getline(cin, str1);
getline(cin, str2);
if (str1.length() != str2.length()) {
cout << "两个字符串长度不同,无法通过移位形成" << endl;
return 0;
}
return 0;
}
步骤3:判断字符串是否可以通过循环移位形成
通过循环移位可以产生多个新的字符串,需要逐个判断这些新字符串是否与另一个字符串相等。如果两个字符串相等,则可以通过循环移位形成。如果所有新字符串都不相等,则无法通过循环移位形成。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1, str2;
getline(cin, str1);
getline(cin, str2);
if (str1.length() != str2.length()) {
cout << "两个字符串长度不同,无法通过移位形成" << endl;
return 0;
}
bool found = false;
for (int i = 0; i < str2.length(); i++) {
string shifted = str2.substr(i) + str2.substr(0, i);
if (shifted == str1) {
found = true;
break;
}
}
if (found) {
cout << "可以通过至多X次循环顺时针移位从另一个字符串形成" << endl;
} else {
cout << "无法通过循环移位形成" << endl;
}
return 0;
}
在上面的代码中,substr()
函数用于提取子字符串。其中,substr(i)
表示从索引i开始提取到字符串末尾的子字符串,substr(0, i)
表示从字符串头部开始提取到索引i的子字符串。
结论
通过以上步骤,可以实现一个C++程序来判断一个字符串是否可以通过至多X次循环顺时针移位从另一个字符串形成。