0
点赞
收藏
分享

微信扫一扫

习题11-6 查找子串 (20 分)

婉殇成长笔记 2022-03-11 阅读 88

本题要求实现一个字符串查找的简单函数。
函数接口定义:

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

解题思路:

char *search(char *s, char *t){
	char *p=s,*q=t;//定义两个辅助指针
	while(*p!='\0'){
		//匹配成功,继续匹配 
		if(*p==*q){
			p++;
			q++;
		}else{
			//匹配不成功,回归到指定位置 
			p=p-(q-t)+1;
			q=t;
		}
		//字串匹配完毕,推出 
		if(*q=='\0')	break;
	}
    //模式串没有匹配完,返回NULL
	if(*q!='\0')	return NULL;
    //成功匹配,返回第一次匹配到的地址
	return p-(q-t); 
}
举报

相关推荐

0 条评论