【发布时间】:2015-03-18 01:37:18
【问题描述】:
所以我正在尝试做这样的事情
#include <stdio.h>
int main(void)
{
char string[] = "bobgetbob";
int i = 0, count = 0;
for(i; i < 10; ++i)
{
if(string[i] == 'b' && string[i+1] == 'o' && string[i+2] == 'b')
count++;
}
printf("Number of 'bobs' is: %d\n",count);
}
但在 python 术语中是这样工作的
count = 0
s = "bobgetbob"
for i in range(0,len(s)):
if s[i] == 'b' and s[i+1] == 'o' and s[i+2] == 'b':
count += 1
print "Number of 'bobs' is: %d" % count
每当我得到一个恰好以“b”结尾的字符串或倒数第二个是“b”后跟一个“o”时,我都会得到一个索引超出范围错误。现在在 c 中这不是问题,因为它仍然会与我假设的垃圾值进行比较,它适用于 c。
如何在不超出范围的情况下在 python 中执行此操作?
我可以像这样遍历字符串本身吗?
for letter in s:
#compare stuff
如何使用上述方法比较字符串中的特定索引?如果我尝试使用
letter == 'b' and letter + 1 == 'o'
这是 python 中的无效语法,我的问题是我正在考虑 c 并且我不完全确定解决这种情况的正确语法。 我知道这样的字符串切片
for i in range(0,len(s)):
if s[i:i+3] == "bob":
count += 1
这解决了这个特定的问题,但是,我觉得使用特定的索引位置来比较字符是一个非常强大的工具。我一生都无法弄清楚如何在 python 中正确地做到这一点,而不会像上面的第一个 python 示例那样遇到一些破坏它的情况。
【问题讨论】:
-
我刚刚意识到,如果我知道我正在搜索的单词的长度,我可以限制我正在搜索的字符串的范围,这样我就不会越界。例如,由于 bob 的长度为三个字母,因此在 for 循环中检查倒数第二个字母是没有意义的,因为 bob 必须至少有 3 个字母长我将范围限制为两个并且我检查的最后一个字母是倒数第三个字母.
标签: python string search slice