diff options
author | Guido van Rossum <guido@python.org> | 1998-10-06 19:43:14 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-10-06 19:43:14 (GMT) |
commit | d5bcf9a343b146a1b06731064c792615d97e45c1 (patch) | |
tree | 3ff38e2f4d67e9757872ef82256b45eda13c6a37 /Modules/stropmodule.c | |
parent | 3836503acdc3cff0a1ceee8c7b4ed54b6d63197a (diff) | |
download | cpython-d5bcf9a343b146a1b06731064c792615d97e45c1.zip cpython-d5bcf9a343b146a1b06731064c792615d97e45c1.tar.gz cpython-d5bcf9a343b146a1b06731064c792615d97e45c1.tar.bz2 |
Andrew Dalke's implementation of string.count().
Diffstat (limited to 'Modules/stropmodule.c')
-rw-r--r-- | Modules/stropmodule.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index 34ac71a..426959e 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -617,6 +617,52 @@ strop_capitalize(self, args) } +static char count__doc__[] = +"count(s, sub[, start[, end]]) -> int\n\ +\n\ +Return the number of occurrences of substring sub in string\n\ +s[start:end]. Optional arguments start and end are\n\ +interpreted as in slice notation."; + +static PyObject * +strop_count(self, args) + PyObject *self; /* Not used */ + PyObject *args; +{ + char *s, *sub; + int len, n, j; + int i = 0, last = INT_MAX; + int m, r; + + if (!PyArg_ParseTuple(args, "s#s#|ii", &s, &len, &sub, &n, &i, &last)) + return NULL; + if (last > len) + last = len; + if (last < 0) + last += len; + if (last < 0) + last = 0; + if (i < 0) + i += len; + if (i < 0) + i = 0; + m = last + 1 - n; + if (n == 0) + return PyInt_FromLong((long) (m-i)); + + r = 0; + while (i < m) { + if (!memcmp(s+i, sub, n)) { + r++; + i += n; + } else { + i++; + } + } + return PyInt_FromLong((long) r); +} + + static char swapcase__doc__[] = "swapcase(s) -> string\n\ \n\ @@ -1122,6 +1168,7 @@ strop_methods[] = { {"atoi", strop_atoi, 1, atoi__doc__}, {"atol", strop_atol, 1, atol__doc__}, {"capitalize", strop_capitalize, 0, capitalize__doc__}, + {"count", strop_count, 1, count__doc__}, {"find", strop_find, 1, find__doc__}, {"join", strop_joinfields, 1, joinfields__doc__}, {"joinfields", strop_joinfields, 1, joinfields__doc__}, |