编程之美—字符串移位包含问题

验证字符串s2通过移位能否包含字符串s1。

 

(1)逐一移位,验证是否包含

(2)只需验证s2s2是否包含s1即可。 s2每隔strlen(s2)次移位后又回到s2,相当于移位后的字符串在 s2~s2s2之间。

代码实现如下:

// stringContain.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;



//字符串s2能否被字符串s1移位所包含
bool StrContain(char *s1,char *s2)
{
	if(strstr(s2,s1)) return true; //考虑不移位的情形

	int len=strlen(s2);
	for(int i=0;i<len;i++)
	{
	    char temp=s2[0];
		for(int j=0;j<len-1;j++)
		{
		     s2[j]=s2[j+1];
		}
		s2[len-1]=temp;

		if(strstr(s2,s1))  //左移移位后进行条件判断
		{
		  return true;
		}
	
	}

	return false;

}

//第二种方法
bool StrContain1(char *s1,char *s)
{
	if(strstr(s,s1))  return true;
}

//字符串连接函数
void Strcon(char *s1,char *s2)
{
	char *p;
	for(p=s1;'\0'!=*p;p++); //找到s1字符串尾部
	for(int i=0;'\0'!=s2[i];i++,p++)
	{
	  *p=s2[i];
	}
	*p='\0';

}

int _tmain(int argc, _TCHAR* argv[])
{
	char s1[]="CDAA";
    char s2[]="AABCD";
    char *s3="AABCD";
	Strcon(s2,s3);
	
	cout<<StrContain(s1,s2)<<endl;
	cout<<StrContain1(s1,s2)<<endl;
	return 0;
}


 

结果:

 

此处要注意指向常量区德指针,即指针地址分配为静态分配,只能读不能写。

因而上面s1和s2字符换采用了栈区分配地址,可以改写内容。

注意strcat(cha *s1, const char *s2),第二个参数为指向常量区德字符串指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值