查找子串
发布日期:2021-06-29 11:17:52 浏览次数:2 分类:技术文章

本文共 1018 字,大约阅读时间需要 3 分钟。

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

函数接口定义:

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

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

裁判测试程序样例:

#include 
#define MAXS 30char *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 Languageram

输出样例1:

10

输入样例2:

The C Programming Languagebored

输出样例2:

-1

思路:匹配算法,关键是用一个指针记录开始匹配时指向s字符串的当前位置,匹配时该指针不动。若匹配失败,指针移动到s字符串的下一位置(并重置指向t字符串的指针),再重新开始匹配。可以对照strstr函数来看。

char *search(char *s, char *t) {
char *p = s;//用作表示指向s字符串的当前位置 char *s1;//检查s char *t1;//检查t while (*p) {
s1 = p; t1 = t;//回到t的首位置再开始匹配 while ((*s1) && (*t1) && (*s1 == *t1)) {
//开始匹配 s1++,t1++; } if (*t1 == 0) {
//表明找到了 return p; } p++;//移到下一位置再继续匹配 } return NULL;}

转载地址:https://blog.csdn.net/zxc0074869/article/details/115129722 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:可变数组(resizable array)
下一篇:数组循环右移

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月03日 06时17分30秒