es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi bucle anidado no verifica el segundo elemento del vector (cadena vacía)?

Estoy un poco atascado con esto.. mi código debería dejar de capitalizar los caracteres cuando llegue al primer string vacío (text[1]).. pero cuando pongo un breakpoint y avanzo; el tercer string es considerado justo después del primero. El segundo elemento es ignorado. El ejercicio consiste en imprimir todos los strings pero solo capitalizar el primero.

“`#include
#include <vector>

int main()
{
std::vector<std::string> text = { "Uno, dos, tres-cuatro-cinco. Una vez pescó un pez.", "", "Seis, siete, ocho-nueve-diez. Luego lo dejé ir de nuevo.", "", "¿Por qué lo dejé ir? Porque me mordió el dedo.", "", "¿Qué dedo me mordió? ¡Este dedo pequeño de mi mano derecha!"};

for (auto it = text.begin(); it != text.end(); ++it) {
for (auto it2 = it->begin(); it2 != it->end() && !it->empty(); ++it2) { //el string vacío en text[2] nunca satisface la segunda condición.
<em>it2 = toupper(</em>it2);
}
std::cout << *it << std::endl;
};

}
“`
¿Alguna idea de por qué? Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la condición del bucle interno: it2 != it->end() && !it->empty(). La parte !it->empty() de la condición hace que el bucle continúe incluso cuando llega a una cadena vacía. En su lugar, se podría comprobar si it2 == it->begin() para ver si es el primer elemento de la cadena, y sólo aplicar la capitalización en ese caso.

    Aquí está una versión actualizada del bucle interno:

    for (auto it2 = it->begin(); it2 != it->end(); ++it2) {
      if (it2 == it->begin()) {
        *it2 = toupper(*it2);
      }
      std::cout << *it2;
    }
    

    Esto sólo capitalizará el primer carácter de la primera cadena no vacía en el vector, e imprimirá todos los caracteres de todas las cadenas en el vector.

Comments are closed.