S = "Woman in Love" is a popular song performed by Barbra Streisand
S1 = “love” ,
结果:love 出现在11个字符开始的位置,
S1 = “people” ,
结果:people 没有出现
利用循环遍历母串和子串,逐一比较其字符即可,下面代码是不区分大小写比较的一个实现,如下:
参考链接:
ASCII码对照表-完整ASCII码表-我就查查询
#include <stdio.h>
#include <string.h>
int intreserch(char s[],char s1[]){
int i=0,j=0,position=0;
int find=0;
char ts[100]; //用于存储将母串转为小写后的字符数组
char ts1[100]; //用于存储将子串转为小写后的字符数组
while(s[i]!='\0'){ //母串全部转为小写
if(s[i]>='A'&&s[i]<='Z'){
ts[i]=s[i]+32;
}else{
ts[i] = s[i];
}
i++;
}
ts[i]='\0';
i=0;
// printf("ts=%s\n",ts);
while(s1[i]!='\0'){ //子串全部转为小写
if(s1[i]>='A'&&s1[i]<='Z'){
ts1[i]=s1[i]+32;
}else{
ts1[i] = s1[i];
}
i++;
}
ts1[i]='\0';
// printf("ts1=%s\n",ts1);
i=0;
while (find==0&&ts[i]!='\0'){ //如果没有找到,则一直在母串中寻找子串,直到寻找完整个母串
j=0; //用于访问子串字符数组的下标变量,置0,表示从子串第一个位置开始比较
while(ts[i]!=ts1[j]&&ts[i]!='\0'){ //越过母串中前面与子串第一个字符不同的字符
i++;
position=i;
// printf("i=%d\n",i);
}
while(ts[i]==ts1[j]&&ts[i]!='\0'&&ts1[j]!='\0'){ //逐一比较母串和子串,直到比较比较完子串或母串,以及遇到不同字母就停止
// printf("i=%d j=%d\n",i,j);
i++;
j++;
}
//如果母串中比较完的相同字符数与子串长度相同,则说明在母串找到了子串,break退出循环,并标记find为1,说明找到子串
if((i-position)==strlen(ts1)){
// printf("find,j=%d,position=%d\n",j,position);
find=1;
break;
}
}
if (find==1){ //如果找到,则返回在母串第几个位置找到子串,数值为找到第一次找到子串的下标+1
return position+1;
}else{ //如果没有找到返回-1
return -1;
}
}
int main(void){
char S[100] = "Woman in Love is a popular song performed by Barbra Streisand";
char S1[100] = "love" ;
int p = intreserch(S,S1);
if (p!=-1){
printf("%s出现在%d个字符开始的位置。\n",S1,p);
}else{
printf("%s没有出现。\n",S1);
}
strcpy(S1,"people");
p = intreserch(S,S1);
if (p!=-1){
printf("%s出现在%d个字符开始的位置。\n",S1,p);
}else{
printf("%s没有出现。\n",S1);
}
return 0;
}