:给定一个主字符串 str 和子字符串 substr,求 出 substr 在 sub 中的位置,返回第一个匹配项的下标( 下标从 0 开始),如果 substr 字符串不是 str 的一部分 ,则返回 -1 。补全函数 matchStr ,以实现特定功能。 输入的参数 : str 主字符串,长度为 mlen;substr 子字 符串,长度为 slen。字符串长度范围是 1 <= slen <= mlen <= 1e4
时间: 2024-03-03 13:48:37 浏览: 95
可以使用暴力匹配算法,逐个比较主字符串和子字符串的每个字符。具体实现如下:
```python
def matchStr(str, substr):
mlen = len(str)
slen = len(substr)
if slen > mlen:
return -1
for i in range(mlen - slen + 1):
j = 0
while j < slen:
if str[i+j] != substr[j]:
break
j += 1
if j == slen:
return i
return -1
```
使用示例:
```python
str = "hello world"
substr = "world"
print(matchStr(str, substr)) # 输出 6
substr = "python"
print(matchStr(str, substr)) # 输出 -1
```
相关问题
删除字符串中所有给定的子串 问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。 要求实现函数: int delete_sub_str(const char
在C++中,你可以创建一个名为`delete_sub_str`的函数,它接受两个参数:一个是原始字符串`str`,另一个是要删除的子串`substr`。下面是一个简单的实现,它遍历整个字符串,每找到一次子串就将其删除,并返回实际删除了的子串的数量:
```cpp
#include <string>
#include <vector>
int delete_sub_str(const std::string& str, const std::string& substr) {
size_t pos = str.find(substr);
int count = 0;
while (pos != std::string::npos) {
str.erase(pos, substr.length());
count++;
pos = str.find(substr); // 更新查找位置
}
return count; // 返回删除的子串次数
}
```
这个函数首先使用`find`函数查找子串的位置,如果找到了就删除那一段,并更新查找的位置到下一个可能出现的地方。如果没找到子串,`find`会返回`std::string::npos`,循环就会停止。
删除字符串中所有给定的子串 问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。 要求实现函数: int delete_sub_str(const char *
在C++中,你可以通过遍历输入字符串并在其中查找指定子串来实现这个功能。这里是一个简单的示例函数,它会使用`std::string`而不是`const char*`,因为`std::string`提供更好的操作和处理子串的功能:
```cpp
#include <iostream>
#include <string>
void delete_sub_str(std::string &str, const std::string &substr) {
size_t pos = str.find(substr); // 查找子串的位置
while (pos != std::string::npos) { // 当找到子串时
str.erase(pos, substr.length()); // 删除子串
pos = str.find(substr, pos + 1); // 继续从下一个位置查找
}
}
// 测试函数
int main() {
std::string input = "Hello, world! This is a test string.";
std::string substr_to_delete = "is";
delete_sub_str(input, substr_to_delete);
std::cout << "Original: " << input << "\n";
return 0;
}
```
在这个例子中,`find()`函数返回子串在字符串中的起始位置,如果找不到则返回`std::string::npos`。`erase()`函数用于删除子串及其之后的内容。
阅读全文