用python编写字符串匹配返回下标
时间: 2023-07-27 09:17:14 浏览: 50
你可以使用 Python 中的字符串方法 `find()` 或 `index()` 来返回字符串中子串的下标。这两种方法都可以接受一个参数,即要查找的子串。不同之处在于,如果子串不存在于字符串中,`find()` 方法会返回 -1,而 `index()` 方法会抛出一个 ValueError 异常。
例如,假设你要在字符串 `s` 中查找子串 `substring`,可以这样写:
```
s = "hello world"
index = s.find("world")
print(index) # 输出 6
try:
index = s.index("foo")
print(index)
except ValueError:
print("substring not found")
```
输出结果为:
```
6
substring not found
```
注意,这两种方法都只能返回第一个匹配的子串的下标,如果要找到所有匹配的子串,可以使用正则表达式或其他字符串处理方法。
相关问题
本关任务:编写一个程序,首先输入一个字符串(少于80个字符),接着再输入一个字符,查找该字符在字符串中是否存在。如果找到,则输出该字符在字符串中对应的最大下标(下标从0开始);否则输出" Not Found "
### 回答1:
输入格式:
第一行为一个字符串 s,保证 s 的长度不超过 80。
第二行为一个字符 c。
输出格式:
根据题意输出一个整数,表示字符 c 在字符串 s 中对应的最大下标,或输出 " Not Found "。
### 回答2:
下面是一个用Python编写的程序,用于查找一个字符在字符串中的最大下标:
```python
# 输入字符串
string = input("请输入一个字符串(少于80个字符):")
# 输入要查找的字符
char = input("请输入一个要查找的字符:")
# 查找字符在字符串中的最大下标
index = -1
for i in range(len(string)):
if string[i] == char:
index = i
# 输出结果
if index != -1:
print("字符", char, "在字符串中的最大下标为:", index)
else:
print("Not Found")
```
使用这个程序,你可以首先输入一个字符串,然后输入要查找的字符。程序会遍历字符串中的每个字符,如果遇到与要查找的字符相同的字符,则更新最大下标。最后根据最大下标是否改变来输出结果。如果最大下标被更新,则输出字符在字符串中的最大下标;如果最大下标没有被更新,则输出"Not Found"表示字符不存在于字符串中。
请注意,这个程序仅适用于少于80个字符的字符串。如果输入的字符串长度超过80个字符,程序可能会出错。
### 回答3:
这是一个简单的字符串查找程序。我会用Python编写这个程序。
首先,我们需要输入一个字符串和一个字符。我们可以使用input函数来获取用户的输入。
然后,我们需要遍历字符串,查找是否存在输入的字符。我们可以使用一个for循环来遍历字符串的每个字符,然后使用if语句来检查每个字符是否匹配输入的字符。
如果找到匹配的字符,我们需要记录下该字符在字符串中的位置。我们可以使用一个变量来记录最大下标,并在循环中不断更新它。
最后,我们根据最大下标是否被更新来判断是否找到了输入的字符。如果最大下标被更新,则输出最大下标;否则输出"Not Found"。
以下是完整的程序:
```python
# 输入字符串
string = input("请输入一个字符串(少于80个字符):")
# 输入字符
character = input("请输入要查找的字符:")
# 初始化最大下标为-1
max_index = -1
# 遍历字符串
for i in range(len(string)):
# 检查字符是否匹配
if string[i] == character:
# 更新最大下标
max_index = i
# 判断是否找到字符
if max_index >= 0:
print("字符在字符串中的最大下标是:" + str(max_index))
else:
print("Not Found")
```
请注意,这个程序假定输入的字符串少于80个字符,如果超过该限制,程序可能会出错。你也可以根据实际情况对程序进行调整。
给定主串s和模式串p,编写程序输出p在s中出现的首位置,若p不在s中则输出-1。字符串下标从0开始。
可以使用字符串匹配算法来解决这个问题,比如暴力匹配、KMP算法、Boyer-Moore算法等。以下是暴力匹配的实现代码:
```python
def find_pattern(s, p):
n, m = len(s), len(p)
for i in range(n - m + 1):
j =
while j < m and s[i+j] == p[j]:
j += 1
if j == m:
return i
return -1
```
其中,n和m分别是主串s和模式串p的长度,i是主串中当前匹配的起始位置,j是模式串中当前匹配的位置。在while循环中,如果当前字符匹配成功(即s[i+j] == p[j]),则继续匹配下一个字符,否则跳出循环,i++后继续在主串中匹配下一个子串。如果模式串中所有字符都匹配成功,则说明找到了匹配的位置,返回i;否则,返回-1表示未找到。
例如,对于主串s="hello world"和模式串p="world",调用find_pattern(s, p)会返回6,表示模式串p在主串s中出现的首位置为6。如果模式串p="python",则返回-1,表示模式串p不在主串s中出现。