以和为标准的判断某字符串为另一字符串子串的方法

申明:因本人参考较少,仅是突然想到没有查阅是否已经有别人想到,因此本文:如有雷同 纯属巧合。。。


   两个字符串,第一个str1,第二个人str2,判断str2是否为str1的子串。


  思路:利用 ASCII码求和来判断。

             'a'的ASCII码为97


            这里简单起见,假设'a'的ascii码为1,'b'的为2,以此类推。。。


           str1: 'abaacdeabaacdfabaadeee'

          str2: 'abaade'(6位)

          先计算str2的ASCII码总和为1+2+1+1+4+5=14,str1从与str2相同的位数开始,也计算6位字符的ASCII码值,为1+2+1+1+3+4=12,两者不相等,因此往后挪一位,

         值变成12-1(str1的首位为a)+5(str1的第七位为e)=16. 依然不相等,因此,继续往后挪。

         需要注意的是,很有可能会出现总和相同,而实际不同的两个字符串,如其中的str1中的’deabaa‘,此时需要比较’deabaa‘与 'abaade',检测是否真的相同,结果显然不相       同。因此继续挪位。直到挪到最后或者出现的相同的子串为止。

代码如下:(在逻辑上正确,求字符ascii码的和上只做了意思表达。)


    

bool isTotalEqual(char str1,int start, int end, char str2[]){//长度相同,判断是否相等
      int i=start;
	  for(;i<=end;i++){
	      if(str1[i]!=*str2)
		     return false;
		  str2++;
	  }
	  return true;
}
bool isSubString(char str1[], char str2[]){
      if(str2 == NULL) return true;
	  if(str1 == NULL) return false;
	  int len1=0;
	  int len2=0;
	  int i=0;
	  int index=0;
	  int sum1=0;
	  int sum2=0;
	  while(str1[len1]!='\0'){
	      len1++;
	  }
	  while(str2[len2]!='\0'&&len1>=len2){//求字符串ASCII编码和
		   sum2+=str2[len2];
		   sum1+=str1[len2++];
	  }
	  if(len1<len2) return false;//子串长于被查找串
	  i=len2;
	  while(i<len1){
	      if(sum1==sum2){//若ASCII编码和相同,查看是否完全相同
		      if(isTotalEqual(str1,index,i-1,str2)){
			     return true;
			  }
		  }
		  sum1-=str1[index++];//求累加和
		  sum1+=str1[i++];
	  }
	  return false;
}


求喷


        

          

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值