查找字符串s2是否在字符串s1中出现,如果出现,则返回第一次出现的位置,否则返回-1。(请使用指针填空)
时间: 2023-05-31 12:19:04 浏览: 279
### 回答1:
int find(char *s1, char *s2)
{
int len1 = strlen(s1);
int len2 = strlen(s2);
for (int i = ; i <= len1 - len2; i++)
{
int j;
for (j = ; j < len2; j++)
{
if (*(s1 + i + j) != *(s2 + j))
{
break;
}
}
if (j == len2)
{
return i;
}
}
return -1;
}
### 回答2:
这道题需要使用指针进行字符串的查找操作。下面是代码示例:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int findStr(char* s1, char* s2) {
char* p1 = s1;
while (*p1 != '\0') {
char* p2 = s2;
char* p3 = p1;
while (*p2 != '\0' && *p3 != '\0' && *p2 == *p3) {
p2++;
p3++;
}
if (*p2 == '\0') {
return p1 - s1;
}
p1++;
}
return -1;
}
int main() {
char str1[50], str2[20];
cout << "请输入字符串s1:";
cin >> str1;
cout << "请输入字符串s2:";
cin >> str2;
int index = findStr(str1, str2);
if (index == -1) {
cout << "字符串s2不在字符串s1中" << endl;
} else {
cout << "字符串s2在字符串s1中第一次出现的位置为:" << index << endl;
}
return 0;
}
```
在代码中,首先定义了一个函数`findStr`来查找字符串s2是否在字符串s1中出现。在函数中,定义了两个指针p1和p2,分别指向字符串s1和s2的起始位置。然后利用while循环,依次比较p1和p2指向的字符是否相同。如果相同,就将两个指针向后移动一位,继续比较下一个字符。如果不同,就退出循环,p1指向下一个字符。如果p2指向的字符是'\0',说明s2已经被完全匹配,返回p1-s1即可。如果查找完整个s1都没有找到s2,就返回-1表示s2不在s1中。
最后通过调用主函数,在控制台输入需要查找的字符串,调用findStr函数,输出结果即可。
### 回答3:
要查找字符串s2是否在字符串s1中出现,可以采用遍历字符串s1的方式,找到s1中每个字符与s2第一个字符相匹配的位置,然后逐一比较字符是否相同,直到匹配整个s2字符串或者在比较过程中发现字符不同,则跳出循环。如果匹配整个s2字符串,则代表s2在s1中出现,返回第一次匹配的位置;如果比较中发现不同,则继续遍历查找下一个可能的匹配位置,直到遍历完整个s1字符串。
以下是使用指针实现的代码:
```c
int my_strstr(const char* s1, const char* s2)
{
const char* p1; // s1指针
const char* p2; // s2指针
if (*s2 == 0) { // s2为空
return 0;
}
while (*s1 != 0) { // 遍历s1
p1 = s1;
p2 = s2;
while (*p1 != 0 && *p2 != 0 && *p1 == *p2) { // 匹配s2
p1++;
p2++;
}
if (*p2 == 0) { // 匹配成功
return s1 - p1;
}
s1++;
}
return -1; // 匹配失败
}
```
在此代码中,s1和s2都是const char*类型的指针,代表字符串的起始地址。在遍历s1时,使用p1和p2两个指针变量来记录当前匹配位置,同时也用它们来比较字符是否相同。在匹配成功时,返回匹配的位置,即s1与p1的距离(p1始终指向匹配成功时的下一个位置)。如果匹配失败,则返回-1。特别地,当s2为空字符串时,直接返回0。
阅读全文