pta算法:查找子串

本题要求实现一个字符串查找的简单函数。

char *search( char *s, char *t );//函数接口定义:

原理:怎么用指针找?

注意:
函数前面的数据类型作用:
int sum(){} // return 值; 就是int 数据类型
void sum(){} //没有数据类型,就没有return 语句
char *search(){} //数据类型是指针,返回return 就是
地址(指针就是地址)

指针地址字符串:
这个字符串:每个字符的地址是如何分配的?

1.指针减指针等于什么?

指针的运算:

p2=p1+7;
printf("%d",p2-p1); //指针相减p2是p1+7,p2-p1就是7

#include<stdio.h>


int main(){
	
	
	
	char *pow;
	
		
	char name[]="hello world do you?";
	
	
	char *p1;
	char *p2=NULL;
	p1=name;
	
	
	
	
	p2=p1+7; 
	printf("%p\n",p1);
	printf("%p\n",p1+1); 
	printf("%p\n",p2); 
	
   

	
	printf("%d",p2-p1);  //指针相减p2是p1+7,p2-p1就是7 
	
	
	
	return 0;
	
} 

效果:返回了7

在这里插入图片描述

2. 查找子串:

#include<stdio.h>
#include<string.h>





char *search( char *s, char *t ){
	
	
	char *pow=NULL; 
	
int b=1;
	
	printf("执行一次\n"); 

	
	//printf("%s_________%s",s,t);//    使用指针直接t不用*号 
	
	
//printf("%c",s[0]); //  这里的s[0]相当于min[0] 一个字符



 
	for(int i=0;s[i]!='\0';i++){
		
	
	
			
		if(s[i]==t[0]){
			
				for(int j=1;t[j]!='\0';j++){
			
		if(	s[i+j]==t[j]  ) //这里循环, 
		b++;                 //如果查找到,这个b值等于t的字符个数 
	 
		
		//break;//这个的作用: 
			
			
		}
		
		
		
	
	}

	if(b==strlen(t)){
		
		//b=i+1;
		
		pow=s+i+1;
		break;
	} else{
		pow=s-1;
		break;
	} 
		
		
	}
	
	
return pow;	
	
}






int main(){
	
	
	
	char min[50];
	char c[20];
	char *p1;
	char *p2;
	char *kon; 
	p1=min;
	p2=c;

	
	gets(min);//
	
	//printf("\n");
	scanf("%s",c);
	
  kon=search(p1,p2);
	
printf("%d",kon-p1); //这里p1是字符串的首地址,	
	
	
	
	
	
	
	
	
	
	
	return 0; 
} 

结果:

成功返回:子串在字符串中的第一个字符位置
返回了:17.

在这里插入图片描述

不成功:返回-1;
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半浮名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值