6-4 查找子串(20 point(s))

这篇博客介绍如何在C语言中实现查找子串的函数,提供了两种不同的实现方法,一种利用`string.h`库求字符串长度,另一种不依赖求长度的函数。博客包括函数接口定义、裁判测试程序样例及输入输出样例。
摘要由CSDN通过智能技术生成

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

函数接口定义:

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 Languagram
ram

输出样例1:

10

输入样例2:

The C Programming Language
bored

输出样例2: 

-1

【c code】建议看第一种,思路比较清晰

第一种,利用头文件"string.h"求字符串长度的

#include <string.h>
char *search( char *s, char *t ){
  int i, j, k=0, slen, tlen;
  char *p=NULL;
  slen=strlen(s);
  tlen=strlen(t);
  for (i=0; i<slen; i++){
    j=i;
    while(s[j]==t[k]){
      k++;
      j++;
    }
    if(k>=tlen){
      p=&s[i];
      break;
    }
    k=0;
  }
  return p;
}

第二种,没有求字符串长度

char *search(char *s, char *t){
	char *flag=NULL; /* t是子串 */
	int i=1, j=0, index=0;
	while(t[i-1]!='\0'){
		while(t[0]!=s[j] && s[j]!='\0' && i==1) j++;  // 找到t[0]对应的s[j]
		if(t[0]==s[j] && i==1) index=j;  // i==1可以保证j是题目要求的首地址
		if(s[j]=='\0' || t[i]=='\0') break;
		j++;  // s的下一位(因为i/是从1开始,j是从0开始的)
		if(t[i]!=s[j]) i=0;  // 如果遇到不相等就重置i
		i++;
	}
	if(t[i]=='\0'){ // 如果遍历了t,就表明s包含t
		char* num=&s[index];
		flag=num;
	}
	return(flag);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值