Buscar todas las ocurrencias y ubicaciones de una subcadena

Estoy escribiendo un progtwig para analizar algunos datos guardados como archivos de texto. Lo que trato de hacer es encontrar la ubicación de cada aguja en un pajar. Ya puedo leer el archivo y determinar el número de apariciones, pero también estoy buscando el índice.

string str,sub; // str is string to search, sub is the substring to search for vector positions; // holds all the positions that sub occurs within str size_t pos = str.find(sub, 0); while(pos != string::npos) { positions.push_back(pos); pos = str.find(sub,pos+1); } 

Editar Leí mal su publicación, dijo subcadena, y supuse que quería decir que estaba buscando una cadena. Esto seguirá funcionando si lees el archivo en una cadena.

Sé que se ha aceptado una respuesta, pero esto también funcionará y te ahorrará tener que cargar el archivo en una cadena.

 #include  #include  #include  #include  using namespace std; int main(void) { const char foo[] = "foo"; const size_t s_len = sizeof(foo) - 1; // ignore \0 char block[s_len] = {0}; ifstream f_in(); vector f_pos; while(f_in.good()) { fill(block, block + s_len, 0); // pedantic I guess.. size_t cpos = f_in.tellg(); // Get block by block.. f_in.read(block, s_len); if (equal(block, block + s_len, foo)) { f_pos.push_back(cpos); } else { f_in.seekg(cpos + 1); // rewind } } }