2010-03-06 13 views
8

si conoce las posiciones de inicio y final en una cadena desde donde comenzar y finalizar la búsqueda. Por ejemplo -Búsqueda de std :: cadena entre un límite

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 

¿Cómo encontrar "tr" en la cadena que especifica la posición para comenzar la búsqueda está en el índice 6 y la posición para finalizar la búsqueda es el índice 9.

Estoy intentando establecer un límite de búsqueda para que no vaya más allá.

+0

Alguien ha votado negativamente la publicación y la respuesta que he aceptado. ¿No era mi pregunta lo suficientemente clara? – cpx

+1

Al igual que con casi cualquier cosa democrática, a veces los votos solo muestran la ignorancia del votante. –

+0

@Jerry El voto a favor fui yo: la pregunta podría haber sido respondida leyendo cualquier libro introductorio sobre C++, algo que Dave17 parece no hacer. –

Respuesta

4

Si realmente desea limitar la longitud de la secuencia que se atraviesa (presumiblemente porque la cadena es muy larga en comparación con la región interesante), use std::search y páselo los iteradores correspondientes en la cadena.

-1

Sí, puede hacerlo con string::find.


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

publica un código, por favor –

+0

Sí, he editado, gracias por el consejo, si fue uno. –

+0

El retorno de find no es size_t, y no ha tenido en cuenta la posibilidad de que no se encuentre la subcadena. –

1

Dada start como la posición en la que desea iniciar la búsqueda, y stop como la posición en la que desea detener la búsqueda:

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

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

Esto supone que lo que estás dando como stop es la última posición en la que puede comenzar una partida. Así que, por ejemplo, si quiere hacer coincidir una subcadena de cuatro caracteres, puede extender hasta tres caracteres más allá de la posición stop. Si desea asegurar el final de la subcadena es antes del punto de parada, que le resta la longitud de la subcadena de stop cuando se compara a pos

+0

¿Qué es "detener"? y "comenzar"? –

+0

No estaba pensando en la instrucción if sino en buscar una función para hacer eso: S – cpx

+1

¿Qué es "npos"? std :: string :: npos? - std :: string :: find devuelve un tamaño_t. –

Cuestiones relacionadas