鱼C论坛

 找回密码
 立即注册
查看: 2574|回复: 2

关于一个字符串包含另一个字符串的问题。。。PS:这个实在是不知道问题出哪了

[复制链接]
发表于 2016-9-7 13:21:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. char*string_in(char*,char*);                        //接受两个参数,若第二个参数包含在第一个字符串内,则返回被包含的字符串开始的地址 ,否则返回空指针
  3. int main(void)
  4. {
  5.         char s1[40],s2[20];                                        //定义s1为第一个参数,s2为第二个参数
  6.         char*pc;                                                       
  7.         do
  8.         {
  9.         puts("enter first string!");
  10.         gets(s1);
  11.         puts("enter second string!");
  12.         gets(s2);
  13.         pc=string_in(s1,s2);                                //定义一个pc指针,将string_in函数赋值给 pc
  14.         if(pc) puts(pc);
  15.         else puts("can't find!");
  16.         puts("continue,Y or N?");
  17.         gets(pc);
  18.         }while (*pc=='Y');                                        //输入Y进行循环
  19.         puts("END!");
  20.         return 0;
  21. }
  22. char*string_in(char*s1,char*s2)
  23. {
  24.         char*p1=s1;char*p2=s2;                                        //将S1的地址赋值给P1,S2的地址赋值给P2
  25.         if(*s1=='\0'||*s2=='\0')  return NULL;        //若字符串第一个字符为空字符,则返回空指针
  26.         while(1)
  27.         {
  28.                 if(*s1==*s2)                                                 //两个字符串字符是否相等
  29.                 {
  30.                         if(*(++s2)=='\0')        return p1;                //若字符串S2的下一个字符为空字符,返回指针P1
  31.                         if(*(++s1)=='\0')         return NULL;        //若字符串S1的下一个字符为空字符,返回空指针
  32.                 }
  33.                 else
  34.                 {if(s1==s1[0])                                                //检查两个字符串的第一个字符 是否相等   例如        S1="ABC",S2="BC"
  35.                         {
  36.                         if(*++s1=='\0')        return NULL;
  37.                         }
  38.                 else
  39.                 {
  40.                 if(*++s1=='\0')  return NULL;                //检测S1的下个字符是否为空字符,若是返回空指针
  41.                 s1--;
  42.                 }
  43.                 p1=s1;
  44.                 s2=p2;
  45.                 }
  46.         }
  47. }
复制代码

感觉自己写的是对的,也试过,可是输入ABC,BC; 输入AABC,ABC;这几个字符串却执行不了,求大神讲解。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-9 10:48:03 | 显示全部楼层
这。。。你字符串直接解星号,其实他拿的是整个字符串,而且比较字符串一般都是strcmp函数或者strstr。
当然,如果想要自己实现,你试着把*str改成str[i],这样起码保证每次取一个吧。【新手勿喷】
网上字符串匹配算法有很多,布鲁斯和kmp,你可以看看了解一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-22 22:07:00 | 显示全部楼层
提示什么?为啥我总觉得是gets函数搞的鬼?你换成scanf函数用%s做占位符试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-11 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表