【C程序练习】《2009年华为软件设计大赛》编程题 第2题,实现子串查找程序

//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");
 }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值