#include<iostream>
#include<string>
using namespace std;
int locateAt(const char* str,const char* sub)//返回sub在str中出现的位置
{
if(str==NULL||sub==NULL)
return -1;
int i=0;
for(;str[i]!='\0';++i)
{
int k=i;
int j=0;
for(;sub[j]!='\0';++j)
{
if(str[k]==sub[j])
++k;
else
break;
}
if(sub[j]=='\0')
return i;
}
if(str[i]=='\0')
return -1;
}
const char* locateAt1(const char* str,const char* sub)//返回sub在str中出现以及之后的字符串
{
const char* st;
const char* su;
while(*str!='\0')
{
st=str;
su=sub;
while(*st==*su)
{
++st;
++su;
if(*su=='\0')
return str;
}
++str;
}
return NULL;
}
void reverse(char* first,char* end)//翻转字符串
{
char temp;
while(first<end)
{
temp=*first;
*first=*end;
*end=temp;
++first;
--end;
}
}
void reverseSentence(char* str)//翻转句子顺序,并保持句子中单词不翻转
{
reverse(str,str+strlen(str)-1);
char* first;
char* end;
first=str;
while(first!='\0')
{
end=first;
while((*end!=' ')&&(*end!='\0'))
{
++end;
}
reverse(first,end-1);
if(*end=='\0')
return;
first=end+1;
}
}
bool isRevStr(const char* str)//判断是否为回文
{
const char* end = str + strlen(str)-1;
while(str<end)
{
if(*str!=*end)
return false;
++str;
--end;
}
return true;
}
int strcmp(const char* str1,const char* str2)//比较两个字符串的大小
{
if(str1==NULL||str2==NULL)
return -2;
int i=0;
while(str1[i]!='\0'&&str2[i]!='\0')
{
if(str1[i]>str2[i])
return 1;
else
if(str1[i]<str2[i])
return -1;
else
++i;
}
if(str1[i]=='\0'&&str2[i]=='\0')
return 0;
else
if(str1[i]=='\0')return -1;
else return 1;
}
char* commonstring(char* str1,char* str2)//寻找两个字符串的最大公共字串
{
if(str1==NULL || str2==NULL)
return NULL;
char* longer,*shorter;
if(strlen(str1)>=strlen(str2))
{
longer=str1;
shorter=str2;
}
else
{
longer=str2;
shorter=str1;
}
if(locateAt(longer,shorter)!=-1)
return shorter;
int length=strlen(shorter);
char* substr=(char*)malloc(sizeof(char)*length+1);
for(int i=length-1;i>0;--i)//i表示截取字符串的长度,从大到小
{
for(int j=0;j<=length-i;++j)//j表示从下标为j的字符开始截取
{
memcpy(substr,&shorter[j],i);
substr[i]='\0';
if(locateAt(longer,substr)!=-1)
return substr;
}
}
return NULL;
}
void main()
{
char* str1="abcdefgh";
char* str2="apcdefjgh";
cout<<commonstring(str1,str2)<<endl;
}