习题11-6 查找子串
本题要求实现一个字符串查找的简单函数。
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;