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.

Eliminación de la puntuación de las cadenas proporcionadas como entrada por el usuario.

En este momento estoy leyendo el libro “C Primer 5th edition” y esta pregunta se hace en el libro, siendo el problema 3.10.
Entonces, básicamente tenemos que eliminar los signos de puntuación si existen en la cadena que proporcionaremos.
Intenté la pregunta e incluso obtengo la salida correcta cuando inicializo la cadena previamente. Aquí está mi código con las cadenas inicializadas antes de la ejecución del código:

Código:

“`cpp
#include <bits stdc++.h="">
#include <string>
using namespace std;

int main()
{
string s("he@@,llo world…!!@");

<pre><code>for(auto &c:s)
{
if(ispunct(c))
{
cout<<"";
}
else
cout<<c; }="" return="" 0;="" }="" “`=”” este=”” código=”” en=”” particular=”” proporciona=”” la=”” salida=”” correcta,=”” es=”” decir,=”” **hello=”” world**.=”” ahora,=”” si=”” intento=”” usar=”” el=”” mismo=”” formato=”” de=”” código=”” pero=”” con=”” la=”” condición=”” de=”” que=”” el=”” usuario=”” tenga=”” que=”” proporcionar=”” la=”” cadena=”” como=”” entrada,=”” entonces=”” el=”” código=”” no=”” da=”” la=”” salida=”” correcta,=”” simplemente=”” ignora=”” el=”” resto=”” de=”” la=”” cadena=”” después=”” del=”” espacio=”” en=”” blanco.=”” el=”” código=”” que=”” intenté=”” es:=”” “`cpp=”” #include=””></c;><bits stdc++.h=””>

#include
using namespace std;

int main()
{
string s;
cin>>s;

for(auto &c:s)
{
    if(ispunct(c))
    {
        cout<<"";
    }
    else
        cout<<c; }="" return="" 0;="" }="" ```="" durante="" la="" ejecución="" del="" código,="" cuando="" ingreso="" la="" cadena="" como="" "he@@,llo="" world...!!@",="" el="" código="" me="" proporciona="" la="" salida:="" **hello**.="" la="" próxima="" parte="" de="" la="" cadena="" después="" del="" espacio="" en="" blanco="" se="" ignora.="" bueno,="" mi="" pregunta="" es:=""> ¿Por qué este código no funciona cuando se toma la cadena como una entrada del usuario? ¿Y qué puedo hacer para que el código funcione sin errores?</c;></string></bits></string></bits>
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código al tomar la entrada del usuario es que el operador de flujo de entrada (>>) deja de leer la entrada tan pronto como encuentra un espacio en blanco. Esto significa que solo se procesa la primera palabra de la cadena de entrada en el código.

    Para solucionarlo, necesitamos utilizar un método diferente para leer la cadena completa, incluyendo los espacios. Una forma de lograr esto es utilizando la función getline proporcionada por C++.

    Aquí tienes una versión actualizada del código que toma la entrada del usuario y elimina la puntuación:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
        string s;
        getline(cin, s);
    
        for (auto c : s) {
            if (!ispunct(c)) {
                cout << c;
            }
        }
    
        return 0;
    }
    

    En este código actualizado, estamos utilizando getline para leer la cadena de entrada completa. Luego, realizamos un bucle a través de cada carácter de la cadena y comprobamos si es un signo de puntuación. Si no lo es, imprimimos el carácter.

    Este código debería eliminar correctamente todos los signos de puntuación de la entrada del usuario e imprimir la cadena resultante.

Comments are closed.