189 8069 5689

C++P0007--移位-创新互联

题目描述

对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串 s 1 s1 s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如 C D A A CDAA CDAA是由 A A B C D AABCD AABCD两次移位后产生的新串 B C D A A BCDAA BCDAA的子串,而 A B C D ABCD ABCD与 A C B D ACBD ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。

苏州网站建设公司创新互联公司,苏州网站设计制作,有大型网站制作公司丰富经验。已为苏州数千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的苏州做网站的公司定做!输入

一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过 300 300 300 。

输出

如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false

题目解析

这道题你的题目读得可能有些懵,来举个栗子:

如果从 a b c d e abcde abcde中寻找一个 b c d bcd bcd,很明显,他在这里:abcde

如果从 a b c d e abcde abcde中寻找一个 d e a b deab deab,很明显,找不到,但是我们可以通过位移把 a b c d e abcde abcde扩大一位,变成 a b c d e a b c d e abcdeabcde abcdeabcde,在寻找就很明显了。看,他在这里:abcdeabcde

所以,我们判断一下两个字符串的长度,将它的长度变成两倍,在寻找这个二倍的字符串中是否有另外一个字符串即可。

其中我们注意,一定是要给长度长的字符串开两倍,假设我们要讲字符串 s 1 s1 s1变为二倍,但是他又比另外一个字符串 s 2 s2 s2小的话,我们直接使用 s w a p swap swap函数,交换一下就可以了。最后将两个 s 1 s1 s1通过位移合并在一起。

if(s1.length()< s2.length()){ 
	// 如果s1字符串的长度比s2字符串短,那么交换位置
	swap(s1, s2);   // swap(a, b)  可以交换a和b    
}                                                  
s1 = s1 + s1;  // s1变为两倍                       
                                                   
if(s1.find(s2) != -1){// 如果找不到,会输出-1   
	// 如果能在s1中找到s2(s2是s1的子串)            
	cout<< "true";                                
}else{     
	cout<< "false";                               
}                                                

科普一下:

在这篇中,我们提到了两个函数:

swap(a,b)

他可以交换两个数的值,请阅读下面的程序:

#includeusing namespace std;
int main(){int a, b;
	cout<< "Please input the a : ";  cin >>a;
	cout<< "Please input the b : ";  cin >>b;
	swap(a, b);
	cout<< "a="<< a<< endl;
	cout<< "b="<< b<< endl;
	return 0;
}                     

如果输入 a = 100 a=100 a=100, b = 200 b=200 b=200,程序会输出什么呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2W34AbKq-1672752101257)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230103210420088.png)]

很明显,将两个数调换了,这也是 s w a p swap swap的作用之在。

string1.find(string2)

如果能在string1中找到string2的话,(string2是string1的子串),那么返回值为 0 0 0。

请阅读下列程序:

#includeusing namespace std;
int main(){string s1, s2;
	cin >>s1 >>s2;
	if(s1.find(s2) == -1)  cout<< "Wrong";
	else cout<< "Right"; 
	return 0;
}

思考问题:

  1. 如果输入hanjiazhenkuaile(寒假真快乐)和kuaile(快乐),那么会输出什么呢?

  2. 如果输入C++Python,那么会输出什么呢?

第一题:

很明显,他在这里: hanjiazhenkuaile

第二题:
没有任何子串,所以不成功

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:C++P0007--移位-创新互联
标题路径:http://cdxtjz.com/article/dsiesh.html

其他资讯