Hola, muy buenas!!... Tengo una funcion que busca parrafos en un fichero y compara si dentro de ese parrafo concreto, existe la palabra que le especifico por consola. Hasta aqui funciona bien si le paso por ejemplo "Juan", el problema que tengo es que si le paso "Juan Perez Pares" debería solo devolverme los parrafos donde esta "Juan Perez Pares" y no "Juan" siempre cuidando que sea case-sensitive ya que no es lo mismo "Juan Perez Pares" que "juan perez pares" Debe ser la búsqueda exacta.. A continuación mi pequeña funcion..
Código:
string encontrarParrafos( istream &in ) {
string buscarPalabra;
string resultado, linea, resultadoMATCH;
string::size_type posicion, found;
const string LF("\n");
const string CR("\r");
const string PUNTO(".");
const string ESPACIO(" ");
const string NUL("\0");
string whitespaces ("\r\n\v\f\t");
bool EsParrafo;
int numlinea=0, parrafo=0, parrafosMATCH=0;
unsigned int lugar;
buscarPalabra = palabrasABuscar(); // Otra funcion que pide palabra/as por consola
while (getline( in, linea )) {
EsParrafo = false;
if (linea.empty()) {
linea.clear();
}
found=linea.find_last_not_of(whitespaces);
if (found!=string::npos)
linea.erase(found+1);
else {
linea.clear();
}
posicion = linea.find_last_of(PUNTO);
//cout << "PUNTO ENCONTRADO en el posicion " << posicion << endl; // Comprobacion
if ((posicion != string::npos && linea.substr(posicion+1)==ESPACIO && linea.substr(posicion+2)==NUL) ||
(posicion != string::npos && linea.substr(posicion+1)==ESPACIO && linea.substr(posicion+2)==CR)) {
parrafo++;
//cout << "Fin de parrafo encontrado en la linea: " << int(posicion ); // Comprobacion
EsParrafo = true;
}
if (EsParrafo){
// Almacenar los parrafos en nuevas lineas "LF"
resultado += linea +LF;
lugar = resultado.find(buscarPalabra);
if (lugar != string::npos) {
parrafosMATCH++;
//Almacenar solo los parrafos que cumplan con la busqueda
resultadoMATCH += resultado;
}
// Limpiar resultado para evitar duplicados
resultado.clear();
} else {
// Concatenar lineas que no tienen fin de parrrafo
resultado += linea +ESPACIO;
resultado.erase( resultado.length() -1 );
}
numlinea++;
}
cout << " ===================================== " << endl;
cout << "+Numero total de lineas analizadas: " << numlinea << endl;
cout << "+Numero total de parrafos: " << parrafo << endl;
cout << "+Parrafos que contienen la busqueda: " << parrafosMATCH << endl;
cout << " ===================================== " << endl;
return resultadoMATCH;
}
La funcion cumple el rol de encontrar parrafos pero me cuenta igual "Juan" que "Juan Perez" osea que solo toma la 1era palabra ingresada..
Agradezco cualquier luz