wang815309286 发表于 2016-9-7 13:21:01

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

#include<stdio.h>
char*string_in(char*,char*);                        //接受两个参数,若第二个参数包含在第一个字符串内,则返回被包含的字符串开始的地址 ,否则返回空指针
int main(void)
{
        char s1,s2;                                        //定义s1为第一个参数,s2为第二个参数
        char*pc;                                                       
        do
        {
        puts("enter first string!");
        gets(s1);
        puts("enter second string!");
        gets(s2);
        pc=string_in(s1,s2);                                //定义一个pc指针,将string_in函数赋值给 pc
        if(pc) puts(pc);
        else puts("can't find!");
        puts("continue,Y or N?");
        gets(pc);
        }while (*pc=='Y');                                        //输入Y进行循环
        puts("END!");
        return 0;
}
char*string_in(char*s1,char*s2)
{
        char*p1=s1;char*p2=s2;                                        //将S1的地址赋值给P1,S2的地址赋值给P2
        if(*s1=='\0'||*s2=='\0')return NULL;        //若字符串第一个字符为空字符,则返回空指针
        while(1)
        {
                if(*s1==*s2)                                                 //两个字符串字符是否相等
                {
                        if(*(++s2)=='\0')        return p1;                //若字符串S2的下一个字符为空字符,返回指针P1
                        if(*(++s1)=='\0')         return NULL;        //若字符串S1的下一个字符为空字符,返回空指针
                }
                else
                {if(s1==s1)                                                //检查两个字符串的第一个字符 是否相等   例如        S1="ABC",S2="BC"
                        {
                        if(*++s1=='\0')        return NULL;
                        }
                else
                {
                if(*++s1=='\0')return NULL;                //检测S1的下个字符是否为空字符,若是返回空指针
                s1--;
                }
                p1=s1;
                s2=p2;
                }
        }
}
感觉自己写的是对的,也试过,可是输入ABC,BC; 输入AABC,ABC;这几个字符串却执行不了,求大神讲解。。

菜鸟dc 发表于 2016-9-9 10:48:03

这。。。你字符串直接解星号,其实他拿的是整个字符串,而且比较字符串一般都是strcmp函数或者strstr。
当然,如果想要自己实现,你试着把*str改成str,这样起码保证每次取一个吧。【新手勿喷】
网上字符串匹配算法有很多,布鲁斯和kmp,你可以看看了解一下

aclii 发表于 2016-9-22 22:07:00

{:10_277:}提示什么?为啥我总觉得是gets函数搞的鬼?你换成scanf函数用%s做占位符试试{:10_257:}{:10_257:}
页: [1]
查看完整版本: 关于一个字符串包含另一个字符串的问题。。。PS:这个实在是不知道问题出哪了