//ex7_function2.c
//编写于2012年9月10日,源作者:曹玲玲
//【实现功能】《2009年华为软件设计大赛》编程题 第2题,实现子川查找程序
//【题目】1,判断一个字符串(dst)是否是另一个字符串(src)的字串
// 2,输出字串在母串中第一次出现的起始位置
// 3,匹配的时候不区分大小写;
// 4,不能使用库函数(使用库函数按0分计算)
//【要求】1,要求实现函数:unsigned int str_str(char *src,char *dst)
// 返回:如果dst是src的子串 则返回起始位置 如果不是 则返回0
// 输入:src指向母串的指针;src指向子串的指针
// 示例;
// src->akrsd5859 dst->rsd 返回3
// src->Rstsawerst36ds dst->rst 返回8
// src->dfsge dst->dfsesa 返回0
#include<stdio.h>
#define strMAX 100
unsigned int CharEqual(char c1,char c2)//判断字符c1,c2是否相同,不区分大小写
{
if (c1==c2)
return 1;
else if (c1>=65&&c1<=90&&(c1+32)==c2)
return 1;
else if (c1>=97&&c1<=122&&(c1-32)==c2)
return 1;
else
return 0;
}
unsigned int str_str(char *src,char *dst)
{
int i=0,j=0;
int position=1;
while (src[i]!='\0'&&dst[j]!='\0')
{
if (CharEqual(src[i],dst[j]))
{
if (j==0)//判断是否是与子串的第一个字母相同
{
position=i+1;
}
i++;
j++;
}
else if (CharEqual(src[i],dst[0]))
{
position=i+1;
j=1;
i++;
}
else
{
j=0;
position=0;
i++;
}
}
if(dst[j]=='\0'&&position>0)
return position;
else
return 0;
}
void str_str_Main()
{
char src[strMAX],dst[strMAX];
unsigned int poisition;
printf("请输入母串和子串:");
while (gets(src)!=NULL&&gets(dst)!=NULL)
{
poisition=str_str(src,dst);
if (poisition==0)
printf("NO,子串%s不是母串%s的子串!\n",dst,src);
else
printf("YES,子串%s是母串%s的子串!,位置为:%d\n",dst,src,poisition);
printf("\n\n请输入下一个母串和子串。输入其他字符结束输入!\n");
}
}