2010-03-06 11 views
8

, wenn Sie wissen, die Start- und Endpositionen in Zeichenfolge von wo zu beginnen und die Suche zu beenden. Zum Beispiel -Suche std :: string zwischen einem Grenzwert

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 

Wie würden Sie „tr“ in der Zeichenfolge die Angabe der Position Suche im Index 6 beginnen finden und die Lage um die Suche zu beenden, ist Index 9.

Ich versuche, Setzen Sie ein Limit für die Suche, damit es nicht darüber hinausgeht.

+0

Jemand hat den Post downvoted und antworte ich akzeptiert. War meine Frage nicht klar genug? – cpx

+1

Ähnlich wie bei den meisten anderen demokratischen, zeigen manchmal Stimmen nur die Ignoranz des Wählers. –

+0

@Jerry Der Downvote war ich - die Frage hätte beantwortet werden können, indem man ein einführendes Buch über C++ gelesen hätte, etwas, das Dave17 anscheinend nicht gut tut. –

Antwort

4

vergleichen Wenn Sie wirklich die Länge der Sequenz wollen begrenzen, wird durchlaufen (vermutlich weil die Zeichenkette im Vergleich zur interessanten Region sehr lang ist), std::search verwenden und die entsprechenden Iteratoren in die Zeichenkette übergeben.

-1

Ja, Sie können das mit string::find tun.


std::string str("StringStringString"); 
std::string::size_type found = str.find("tr", 6, 9 - 6); 
+0

post einige Code, bitte –

+0

Ja, ich habe bearbeitet, danke für den Rat - wenn es einer war. –

+0

Die Rückgabe von find ist nicht size_t, und Sie haben die Möglichkeit nicht berücksichtigt, dass die Teilzeichenfolge nicht gefunden wird. –

1

start als die Position gegeben, wo Sie wollen die Suche starten, und stop als die Position, wo Sie aufhören wollen zu suchen:

int pos = your_string.find("tr", start); 

if (pos == std::string::npos || pos > stop) 
    // it wasn't found. 

Dies setzt voraus, dass das, was Sie geben als stop ist die letzte Position, an der eine Übereinstimmung beginnen kann. Wenn Sie beispielsweise einen Teilstring mit vier Zeichen Länge abgleichen möchten, kann er sich bis zu drei Zeichen nach der stop-Position erstrecken. Wenn Sie das Ende des Teils ist vor dem Haltepunkt gewährleisten wollen, sollten Sie die Länge des Teils von stop subtrahieren, wenn Sie pos

+0

Was ist "Stopp"? und Start"? –

+0

Ich habe nicht über die if-Anweisung nachgedacht, sondern eine Funktion gefunden, die das macht: S – cpx

+1

was ist "npos"? std :: string :: npos? - std :: string :: find gibt eine Größe_t zurück. –

Verwandte Themen