查找子串:输入两个字符串 s 和 t ,在字符串 s 中查找子串 t ,输出起始位置,若不存在,则输出 -1。要求自定义函数 char *search(char *s, char *t)返回子串 t在字符串s中的位置,若未找到,则返回 NULL 。试编写相应程序。
时间: 2024-09-07 20:04:07 浏览: 51
C语言求两个字符串的最长公共子串
5星 · 资源好评率100%
在C语言中,你可以通过遍历字符串`s`并逐字符比较是否匹配字符串`t`的方式来实现这个查找子串的功能。下面是一个简单的自定义函数示例:
```c
#include <stdio.h>
#include <string.h>
char* search(char* s, char* t) {
int i = 0; // s的索引
int j = 0; // t的索引
while (i < strlen(s)) { // 遍历s
if (s[i] == t[j]) { // 如果当前字符匹配
i++; // 移动到下一个字符
j++;
} else {
i -= j; // 如果不匹配,回溯j个字符
j = 0; // 从头开始比较
}
if (j == strlen(t)) { // 找到了完整的t
return (char*)(i); // 返回起始位置
}
}
return NULL; // 没有找到子串t,返回NULL
}
int main() {
char str[] = "Hello, world!";
char substr[] = "world";
char* result = search(str, substr);
if (result != NULL) {
printf("Substring found at position %d\n", *result);
} else {
printf("Substring not found\n");
}
return 0;
}
```
在这个例子中,`search`函数会检查`s`中的每个字符是否与`t`相匹配,并记录下子串的位置。如果`t`在`s`中被完全包含,函数将返回对应的索引;否则,在找不到匹配的情况下返回NULL。
阅读全文