验证字符串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),第二个参数为指向常量区德字符串指针。