2020-12-23

寻找字符串子串问题c++
代码如下:

#include<iostream>
#include<iomanip>
#include<algorithm> 
using namespace std;
void test01(){
	char yuan[20]="\0";
	char zi[20]="\0";
	cin>>yuan>>zi;
	int len1=0;int len2=0;
	for(int i=0;yuan[i]!='\0';i++){
		len1++;
	}
	for(int i=0;zi[i]!='\0';i++){
		len2++;
	}
	if(len2>len1){
		cout<<"没有"<<endl;
		exit(1); 
	}
	char *y=yuan;
	char *z=zi;
	int i=0;
	while(*y!='\0'&&*z!='\0'){
		if(*y==*z){
			y++;z++;i++;
			
		}
		else{
			if(*z!=zi[0]){
				z=zi;
				y=y-i+1;
				i=0;
			}
			else{
				y++;z++;
			}
		}
		
	}
	if(*z=='\0'){
		cout<<"找到该子串"<<endl; 
		cout<<"位置为"<<y-len2 ;
	}
	
	
	
	
	
	
}







int main(){
	
	test01();
	
	return 0;
}
/*
hhhhhkjj
hhhk
ahduhdasjo
hda*/

主要讲解while循环部分
当子串字母与源串相同时,继续判断。
若不同,分两种情况。
1子串在首字母。说明源串与子串第一个就不同,自然二者都加一向下继续判断。
2子串指针不在首字母。说明源串与子串在其中某个字母不同,这时需要把子串指针重新指向第一个字母,而把源串指针移动到最初判断相等的字母之后。
例如:源串hhhhhhkj
子串hhk

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值