用指针查找子串

发布时间:2023年12月22日

本题要求实现一个字符串查找的简单函数。

函数接口定义:

 

char *search( char *s, char *t );

函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 30

char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */

int main()
{
    char s[MAXS], t[MAXS], *pos;
    
    ReadString(s);
    ReadString(t);
    pos = search(s, t);
    if ( pos != NULL )
        printf("%d\n", pos - s);
    else
        printf("-1\n");

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

The C Programming Language
ram

输出样例1:

10

输入样例2:

The C Programming Language
bored

输出样例2:

-1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C程序如下:

char *search( char *s, char *t )
{
    char *p = s;//定义一个指针p,指向s所指向的变量
    char *q = t;//定义一个指针q,指向t所指向的变量
    int flag;//定义一个标志flag
    while(*s != '\0')//遍历s所指向的字符串
    {
        p = s;//让指针p指向s所指向的变量
        q = t;//让指针q指向t所指向的变量
        if(*p == *q)//比较指针q指向的字符数组的第一个字符
        {//与q所指向的字符数组中的某个字符是否相等
            flag = 1;//让flag等于1
            while(*q != '\0')//遍历q所指向的字符数组中的每一个字符
            {
                if(*p != *q)//如果两个字符数组有不相等的字符
                {
                    flag = 0;//让flag等于0
                    break;//退出循环
                }
                p++;//否则指针p指向下一个字符
                q++;//指针q也指向下一个字符
            }
        }
        if(flag == 1)//若遍历整个q所指向的字符数组flag的值都没有改变
        {//则q所指向的字符数组就是p所指向的数组的子数组
            return s;//此时返回指针s
        }
        s++;//否则s指向字符数组中的下一个字符
    }
    return NULL;//若遍历整个s所指向的字符数字都没有找到子串,则返回NULl
}//NULL在指针中表示不指向任何变量,相当于返回0

文章来源:https://blog.csdn.net/2302_80325489/article/details/135110474
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。