C++实现验证子串的功能:今天复习了一下数据结构的串部分的内容,突然想起来子串匹配的实现,于是计蒜客随便找一道题写一下,核心的代码为裁剪子串和字符串比较两个内容,建议理解+背诵,考研大概率会考。
子串裁剪
string Sfind(string s,int pos,int len)
{
string temp;
for(int i=pos;i<len+pos;i++)
{
temp+=s[i];
}
return temp;
}
如上,传入3个参数:目标字符串,开始裁剪的位置下标,以及裁剪字符的个数,最后返回值为裁剪好的字符串子串。
子串比较
int Scmp(string sa,string sb)
{
int ans=0;
for(int i=0;i<=sa.length()-1;i++)
{
if(sa[i]!=sb[i])
{
ans=sa[i]-sb[i];
return ans;
}
}
ans=sa.length()-sb.length();
return ans;
}
如上,将需要比较的两个字符串传入,定义返回值为整型,当返回值为0时,字符串相等,而返回正值则代表前者大,负值则说明后者大;如果匹配的字符完全相等但长度不同,则认为长的字符串更大一些。
完整代码如下:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
string Sfind(string s,int pos,int len)
{
string temp;
for(int i=pos;i<len+pos;i++)
{
temp+=s[i];
}
return temp;
}
int Scmp(string sa,string sb)
{
int ans=0;
for(int i=0;i<=sa.length()-1;i++)
{
if(sa[i]!=sb[i])
{
ans=sa[i]-sb[i];
return ans;
}
}
ans=sa.length()-sb.length();
return ans;
}
int main(int argc, char** argv)
{
string s1,s2;
cin>>s1;
cin>>s2;
if(s1.length()>=s2.length())
{
int f1=0;
for(int i=0;i<=s1.size()-1;i++)
{
string temp=Sfind(s1,i,s2.length());
if(Scmp(s2,temp)==0)
{
cout<<s2<<" is substring of "<<s1<<endl;
f1=1;
break;
}
}
if(f1==0)
cout<<"No substring"<<endl;
}
else if(s1.length()<s2.length())
{
int f1=0;
for(int i=0;i<=s2.size()-1;i++)
{
string temp=Sfind(s2,i,s1.length());
if(Scmp(s1,temp)==0)
{
cout<<s1<<" is substring of "<<s2<<endl;
f1=1;
break;
}
}
if(f1==0)
cout<<"No substring"<<endl;
}
return 0;
}