对于字符串s和t,若t是s子串,返回t在s中的位置(t的首字符在s中对应的下标),否则返回-1。c语言
时间: 2024-10-10 12:13:16 浏览: 21
如何取得中文字符串中出现次数最多的子串
在C语言中,你可以通过循环查找的方式来找到一个子串在另一个字符串中的位置。下面是一个简单的函数实现,它使用了标准库函数`strstr()`,但如果需要自定义实现,可以参考下面的代码:
```c
#include <stdio.h>
#include <string.h>
int findSubstring(char* s, char* t) {
if (!t || !s) { // 检查输入是否为空
return -1;
}
size_t len_s = strlen(s); // 获取s的长度
size_t len_t = strlen(t); // 获取t的长度
// 遍历s,尝试从每个可能的位置开始匹配t
for (size_t i = 0; i <= len_s - len_t; i++) {
if (strncmp(s + i, t, len_t) == 0) { // 使用strncmp避免缓冲区溢出
return (int)i; // 找到匹配时返回起始索引
}
}
return -1; // 如果没有找到匹配,返回-1
}
// 测试函数
int main() {
char s[] = "Hello, World!";
char t[] = "World";
int result = findSubstring(s, t);
if (result != -1)
printf("子串 '%s' 在字符串 '%s' 中的位置: %d\n", t, s, result);
else
printf("子串 '%s' 不在字符串 '%s' 中。\n", t, s);
return 0;
}
```
这个函数会尝试从s的第一个字符开始,逐个字符向前搜索,直到找到完全匹配的子串`t`或者搜索完整个`s`。如果找到匹配,返回子串在`s`中的起始索引;如果没有找到,则返回-1。
阅读全文