本题要求实现一个字符串查找的简单函数。
函数接口定义:
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
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/12/exam/problems/364
提交:
题解:
/*
* 返回子串 t 在 s 中的首地址。若未找到,则返回 NULL
*/
char *search(char *s, char *t) {
for (int i = 0; s[i] != '\0'; i++) {
// 记录在 s 中是否找到 t: [1]是 [0]否
int found = 1;
// 在 s 中找到了 t 的首字符,开始逐个比较二者接下来的字符是否相同
if (s[i] == t[0]) {
int index = i;
for (int j = 1; t[j] != '\0'; j++) {
// 有一个不相同,则重新在 s 中寻找 t 的第一个首字符
if (s[++index] != t[j]) {
found = 0;
break;
}
}
// 成功在 s 中找到 t
if (found == 1) {
return s + i;
}
}
}
return NULL;
}