-
查找子串:输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1。要求自定义函数char *search(char *s,char *t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。
#include <stdio.h>
#include <stdlib.h>
//朴素匹配算法
char *search(char *s, char *t);int main()
{
// 测试示例
char str1[] = "hello world";
char str2[] = "world";
char *result = search(str1, str2);if (result != NULL) { printf("找到子串,位置: %s\n", result); } else { printf("未找到子串\n"); } return 0;}
// 在字符串s中查找子串t,找到返回第一次出现的指针,否则返回NULL
char *search(char *s, char *t) {
// 处理特殊情况
if (s == NULL || t == NULL || *t == '\0') {
return s; // 空串总是匹配
}char *sp, *tp, *start; // 遍历主字符串s for (sp = s; *sp != '\0'; sp++) { start = sp; // 记录可能的匹配起始位置 tp = t; // 每次从子串开头开始比较 // 逐个字符比较 while (*sp != '\0' && *tp != '\0' && *sp == *tp) { sp++; tp++; } // 如果子串已遍历完,说明匹配成功 if (*tp == '\0') { return start; } // 恢复sp到下一位置继续查找 sp = start; } return NULL; // 未找到}
输出结果:找到子串,位置: world