题目描述
本题要求实现一个字符串查找的简单函数。
函数接口定义:
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; } /* 你的代码将被嵌在这里 */
输入
由题目自动完成
输出
由题目自动完成
样例输入 Copy
The C Programming Language ram
样例输出 Copy
10
//查找子串,如果有多个,放回地址最小的
#include <stdio.h>
#define MAXS 30
char *search( char *s, char *t ){
char *pos = t;//拿来比对的字符串
int flag = 0;
char *temp = NULL;//拿来返回地址的
while(*s != '\0'){
pos = t;//每次都要初始化pos,因为后面需要变化他的地址
if(*s == *pos){//遇到首字符相等的情况,开始判断
temp = s;//先记住子串出现的首字符位置
while(*pos != '\0'){//判断整个子串是否相等
if(*s != *pos){
flag = 0;//不相等,则说明不是子串
break;//跳出这层循环,进行下一次判断
}else{
s++;pos++;//遍历整个子串
flag = 1;
}
}
if(flag == 1){
return temp;//标记为1,说明是子串,直接返回
}
}else{
s++;//与子串的首字符不相等,遍历s
}
}
if(flag == 0){
return NULL;//未找到含有子串的地方,返回NULL
}
}