(1)查找子串:输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1。要求自定义函数char ※search(char *s,char *t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。
时间: 2024-02-09 17:10:45 浏览: 87
好的,我理解了你的问题。以下是代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
char* search(char* s, char* t) {
int n = strlen(s);
int m = strlen(t);
for (int i = 0; i <= n - m; i++) {
bool flag = true;
for (int j = 0; j < m; j++) {
if (s[i + j] != t[j]) {
flag = false;
break;
}
}
if (flag) {
return s + i;
}
}
return NULL;
}
int main() {
char s[100], t[100];
cin >> s >> t;
char* res = search(s, t);
if (res == NULL) {
cout << -1 << endl;
} else {
cout << res - s << endl;
}
return 0;
}
```
函数`search`中,首先获取字符串`s`和`t`的长度,并且使用两个for循环进行遍历。在外层循环中,从0到n-m依次遍历s中的每个字符作为子串的起点,内层循环则是对t和s中的子串进行逐一比较。如果发现任意字符不相等,则当前子串不是t的子串,退出内层循环,进入下一次循环。如果所有字符都相等,则说明找到了t的子串,返回该子串的首地址。如果找不到,则返回NULL。
在主函数中,首先从标准输入中读入两个字符串s和t,然后调用`search`函数获取t在s中的位置。如果获取到了t的子串,则输出其在s中的位置,否则输出-1。
希望这个程序能够解决你的问题。如果你还有什么问题,请随时提出。
阅读全文