对于字符串s和t,若t是s子串,返回t在s中的位置(t的首字符在s中对应的下标),否则返回-1。用c++来完成
时间: 2024-10-10 08:14:10 浏览: 13
在C++中,你可以通过双重循环来寻找字符串`t`在字符串`s`中的位置。下面是一个简单的函数示例:
```cpp
#include <string>
using namespace std;
int findSubstring(string s, string t) {
int lenT = t.length(); // 获取子串长度
for(int i = 0; i <= s.length() - lenT; ++i) { // 遍历主串
bool found = true; // 检查子串是否存在
for(int j = 0; j < lenT; ++j) { // 比较子串字符
if(s[i+j] != t[j]) {
found = false;
break;
}
}
if(found) return i; // 找到了就返回起始索引
}
return -1; // 如果没找到,则返回-1
}
```
此函数首先检查`s`的剩余部分是否足够长来容纳`t`。然后逐个字符比较子串`t`和`s`中的对应位置,如果发现不匹配则跳出内部循环,并继续下一个可能的位置。一旦找到完全匹配的子串,就立即返回其起始索引。如果没有找到,最后返回-1表示`t`不是`s`的子串。
相关问题
对于字符串s和t,若t是s子串,返回t在s中的位置(t的首字符在s中对应的下标),否则返回-1。c语言
在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。
3.对于字符串s和t,若t是s子串,返回t在s中的位置(t的首字符在s中对应的下标),否则返回-1。用c语言
在C语言中,我们通常使用标准库函数`strstr()`或者自定义一个函数来查找子串在字符串中的位置。如果你想要自定义一个函数,可以参考下面的代码实现,这里假设`s`是一个主字符串,`t`是一个子字符串:
```c
#include <string.h>
#include <stdio.h>
// 函数声明,返回子串在主串中的起始位置,找不到返回-1
int findSubstringInString(char* s, char* t) {
if (!s || !t) { // 确保输入非空
return -1;
}
// 使用逐个字符匹配的方式寻找子串
int len_s = strlen(s);
int len_t = strlen(t);
for (int i = 0; i <= len_s - len_t; i++) {
if (strncmp(&s[i], t, len_t) == 0) { // strncmp比较两个字符串是否相等,忽略大小写
return i;
}
}
// 如果没有找到,返回-1
return -1;
}
// 测试函数
int main() {
char str[] = "Hello, World!";
char substr[] = "World";
int position = findSubstringInString(str, substr);
if (position != -1) {
printf("Substring '%s' found at index %d\n", substr, position);
} else {
printf("Substring not found.\n");
}
return 0;
}
```
这段代码首先检查输入是否为空,然后遍历主字符串`s`的每个可能的起始位置,使用`strncmp()`函数逐字符对比子串`t`,如果找到完全匹配,则返回该位置;如果没有找到,则返回-1。
阅读全文