查找两个字符串的最小字串。(原创,闲着无事,检验下自己的水平,请大家给予评论)

#include "iostream"
#include "string.h"
using namespace std;
void main()
{
   char ch1[]="asdfghjkylasdfasdfhjdsfgsdfgsfgdsfgdfgadfgdsfgsdfgklfgh";
   char  ch2[]="asdmmmhjklsfdrgs dfgsdfgsdfgsdfgddsfgsdfgsdfggfdsfg";

///可以不用看

   int len1=0,len2=0;
   while (ch1[len1]!='/0')
    {
    len1++;
   }
   while (ch2[len2]!='/0')
   {
    len2++;
    }
   

//   cout<<len1<<" "<<len2<<endl;

/
   char **ch=new char*[10000];//用来存储比较后的字符串
   for (int i=0;i<=10000;i++)
   {
    ch[i]=new char[1000];
   }

  
   char *p1=ch1, *q1=p1;  //p1指向第一个字符串用来自增,q1用来一直指着第一个字符。
   char *p2=ch2, *q2=p2;  //q2用来指向第二个字符串需要匹配的字符地址。
   char *p=NULL;              
   i=0;
   int j=0;
   int max=0;
   bool f=false;                 //看ch是否记录
   while (*q2!='/0')
   {
     
     while (*p1!='/0')
     {
      while (*p1==*p2 && *p2!='/0' && *p1!='/0')
      {
       ch[i][j]=*p1;
       j++;
       *p1++;
       *p2++;
       f=true;
      }
     
      if (j>max)
      {
       max=j;
       p=p2;   //记录第二个字符串当前位置
      }
      if (f==true)
      {
       ch[i][j]='/0';
       j=0;
        i++;
       f=false;
       p2=q2;  //第二个字符串重新开始
      }
   
      *p1++;
        
     }
      q2=p;
      p++;
      p1=q1;
      p2=q2;
   }
   max=0;
   int out=0;
   int l1=i;
   for (i=0;i<l1;i++)
   {
    for (j=0;ch[i][j]!='/0';j++)
    {
 // cout<<ch[i][j];
    }
       if (j>max)
       {
     max=j;
     out=i;
       }
    cout<<endl;
   }
   cout<<"the max sub_string is "<<ch[out]<<endl;

 

}

 

 

 

 

 

 

 

 

 

 

 

 

结果:the max sub_string is dsfgsdfgs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值