2018年北理上机题-第二题

本文介绍了一种通过C++实现的算法,该算法用于计算一个字符串经过shift操作(即首位字符移动到末尾)后,能与原字符串匹配的次数。示例包括'byebye'输出2次,'abcd'输出1次。文章详细展示了如何使用substr函数截取字符串并进行比较的过程。

题目二:

描述:一次shift操作就是把一个单词的第一个挪到最后,单词有n位就最多挪n次,问可以和原单词相同几次。
如输入:byebye 输出:2
输入:abcd 输出:1

注意:
substr(index,num)返回本字符串的一个子串,从index开始,长num个字符。如果没有指定,将是默认值 string::npos。这样,substr()函数将简单的返回从index开始的剩余的字符串。
例如:
string s(“What we have here is a failure to communicate”);
string sub = s.substr(21);
cout << "The original string is " << s << endl;
cout << "The substring is " << sub << endl;
显示:
The original string is What we have here is a failure to communicate
The substring is a failure to communicate

/*描述:一次shift操作就是把一个单词的第一个挪到最后,单词有n位就最多挪n次,问可以和原单词相同几次。
如输入:byebye    输出:2
输入:abcd    输出:1*/
#include<iostream>
#include<string>
using namespace std;
int main(){
	string s,cur;
	cin>>s;
	int sum=0;//和原字符串相同次数 
	string str=s;//保存原字符串 
	for(int i=0;i<s.size();i++){
		cur=s.substr(1);//用substr截取第一个字符以后的全部字符,注意substr的用法 
		cur=cur+str[i];//再加上被删去的字符
		//以上完成一次shift操作 
		//cout<<i<<" "<<cur<<endl;
		if(cur==str){
			sum++;
		}
		s=cur;
	}
	cout<<sum<<endl;
	return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值