查找字符串s2是否在字符串s1中出现,如果出现,则返回第一次出现的位置,否则返回-1。
时间: 2023-05-31 15:18:55 浏览: 395
字符串的定义-Pascal语言
### 回答1:
可以使用Python中的字符串函数find()来实现这个功能。find()函数返回字符串中第一次出现子字符串的位置,如果没有找到,则返回-1。
代码如下:
def find_str(s1, s2):
return s1.find(s2)
如果需要忽略大小写,可以先将两个字符串都转换为小写或大写再进行查找。
代码如下:
def find_str(s1, s2):
s1 = s1.lower()
s2 = s2.lower()
return s1.find(s2)
### 回答2:
题目要求我们找出一个字符串s2是否在另一个字符串s1中出现,并返回s2在s1中第一次出现的位置。如果s2没有出现在s1中,则返回-1。
首先我们可以使用字符串的内置函数来实现这个功能。最常用的是find函数。该函数返回第一次出现子字符串的位置。如果子字符串不在原字符串中,则返回-1。示例代码如下:
```
string s1, s2;
cin >> s1 >> s2;
int pos = s1.find(s2);
if (pos == string::npos) {
cout << "-1" << endl;
} else {
cout << pos << endl;
}
```
另一种实现方式是使用循环遍历原字符串s1,然后在每个位置i处比较s1[i]及之后的字符是否与s2相等。如果相等,则说明s2在s1中出现了。代码如下:
```
string s1, s2;
cin >> s1 >> s2;
int n = s1.size(), m = s2.size();
if (m == 0) { // 如果s2为空字符串,则返回0
cout << "0" << endl;
return 0;
}
for (int i = 0; i <= n - m; i++) {
bool flag = true;
for (int j = 0; j < m; j++) {
if (s1[i + j] != s2[j]) {
flag = false;
break;
}
}
if (flag) {
cout << i << endl;
return 0;
}
}
cout << "-1" << endl; // s2未出现在s1中
```
以上两种方法都可以实现题目要求。第一种方法使用了STL中的函数,代码较简洁且易读;第二种方法需要自己编写循环,但方法较通用,适用于更多情况。
### 回答3:
这道题目实际上是要求在字符串s1中查找是否包含子字符串s2,如果包含,则返回第一次出现的位置,如果不包含,则返回-1。我们可以用一些简单的算法来实现这个功能。
首先,我们可以使用暴力枚举法,即从字符串s1的每一个位置开始,逐个比较s1和s2中各个字符是否一一相等,如果都相等,则返回当前位置;如果不相等,则继续在s1中向后移动一个字符,继续比较,直到找到了s2为止,或者遍历完整个s1都没有找到s2。
其次,我们可以使用KMP算法,该算法是一种常用的字符串匹配算法,可以在O(n+m)的时间复杂度内实现字符串匹配。KMP算法的基本思想是利用一个前缀表(Prefix Table)来跳过不必要的字符比较,以加速字符串匹配的过程。具体实现可以在网上查阅相关资料。
最后,我们还可以利用正则表达式来完成该任务。在Python中,我们可以使用re模块的findall()函数来实现正则表达式的匹配,该函数可以返回所有匹配的位置。
综上所述,以上三种方法均可实现查找字符串s2是否在字符串s1中出现,如果出现,则返回第一次出现的位置,否则返回-1。
阅读全文