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

来源:互联网 发布:网络侵权责任纠纷 编辑:程序博客网 时间:2024/05/23 23:44

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

0 0
原创粉丝点击