если Вы знаете запуск и конечные положения в строке от того, где начать и закончить поиск. Например -
string s = StringStringString
|S |t |r |i |n |g |S |t |r |i |n |g |S |t |r |i |n |g
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Как Вы нашли бы "TR" в строке, указывающей, положение для начала поиска в индексе 6, и положение для окончания поиска является индексом 9.
Я пробую набор предел поиска, таким образом, он не пошел бы вне его.
Если вы действительно хотите ограничить длину обходящейся последовательности (предположительно потому, что строка очень длинная по сравнению с интересной областью), используйте std::search
и передайте ему соответствующие итераторы в строке.
Да, вы можете сделать это с помощью string :: найдите .
std::string str("StringStringString");
std::string::size_type found = str.find("tr", 6, 9 - 6);
Учитывая start
как позицию, с которой вы хотите начать поиск, и stop
как позицию, где вы хотите остановить поиск:
int pos = your_string.find("tr", start);
if (pos == std::string::npos || pos > stop)
// it wasn't found.
Предполагается, что то, что вы указываете как stop
, является той последней позицией, с которой может начаться совпадение. Так (например), если вы хотите сопоставить подстроку длиной четыре символа, она может длиться до трех символов после позиции stop
. Если вы хотите убедиться, что конец подстроки находится перед точкой остановки, вы должны вычесть длину подстроки из stop
при сравнении с pos