6-1 查找子串 (12 分)
本題要求實現一個字符串查找的簡單函數。
函數接口定義:
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
#include<string.h>
char *search(char *s, char *t){
char *p=NULL;
int i,j,slen,tlen,k;
slen=strlen(s);
tlen=strlen(t);
for(i=0;i<slen;i++){ //從主串的第一個開始比較
j=i; //記錄主串的首個地址值
while(s[j]==t[k]){ //依次比較後面的字符串
k++;
j++;
}
if(k>=tlen) //k>=lent才能滿足,長度超過題面MAXS, t在結尾處這個條件
return &s[i];
k=0;
}
return p;
}