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>
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:
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.