Comparar string con retorno de carro , tabulador y demás caracteres especiales

Iniciado por hervasiop12345, 21 Noviembre 2011, 23:10 PM

0 Miembros y 1 Visitante están viendo este tema.

hervasiop12345

Hola a todos. Necesito parar un bucle al encontrar un caracter especial pero no lo consigo. Parece una pregunta trivial pero a más de uno seguro que le interesa. Gracias de antemano y dejo la forma que creía que funcionaria.

#include<string>
#include<iostream>
using namespace std;
int main(){
   string comando;   
   while(comando!="\n"){
      cin>>comando;
   }
   return 0;
}



x64core

hola , malo:
  string comando;


int main(){
   char comando;   
   while(comando !=  Special Char)
   {
      cin>>comando;
   }
   return 0;
}

hervasiop12345

Cita de: RHL en 21 Noviembre 2011, 23:52 PM
hola , malo:
  string comando;


int main(){
   char comando;   
   while(comando !=  Special Char)
   {
      cin>>comando;
   }
   return 0;
}


no funciona

BlackZeroX

Cita de: hervasiop12345 en 22 Noviembre 2011, 10:07 AM
no funciona

Pues claro que eso no funciona y tu por que crees que no funcione... Pista esta como usan el while...

Usa un poco mas tu materia gris y veras la solucion... xP, te la puedo decir y muchos podran hacerlo pero a mi criterio será mejor que solo te guie.

Sangrientas Lunas!¡.
The Dark Shadow is my passion.

hervasiop12345

A ver si te crees que lo he puesto tal cual.

#include<string>
#include<iostream>
using namespace std;
int main(){
   char comando;   
   while(comando != '\n'){
      cin>>comando;
      cout<<comando<<endl;
   }
   return 0;
}

y por mucho que pulse enter no funca

rir3760

Para leer caracteres hasta alcanzar uno en particular puedes utilizar la funcion "getline" con dos argumentos (el tercero se toma como '\n') o tres (si quieres leer hasta algun otro caracter).

Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::getline;

#include <string>
using std::string;

int main()
{
string linea;
char delim = '\n';

getline(cin, linea, delim);
cout << "La linea es " << '\"' << linea << '\"' << endl;

return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

RyogiShiki

Aquí un ejemplo sin el uso de char y puro String:

Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

int main() {
 string s;
 
 do {
   getline(cin, s);
   cout << s << endl;
 } while (s.find('\t') == string::npos);
  return 0;
 
}


saludos


x64core

que cosa! que COÑASO!?
quien dice que mi codigo no funciona  :¬¬

@rir3760
En mi codigo escribi solo la funcion main, daba por hecho que hibas a hacer tu las declaraciones!
y pongo el codigo completo para que vean que SI FUNCIONA

Código (c++) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
   char comando;
   while(comando !=  'a')
   {
      cin>>comando;
   }
    return 0;
}



el codigo lee y sale del bucle si detecta la letra "a" y un enter  :¬¬




rir3760

Cita de: RHL en 22 Noviembre 2011, 17:09 PMquien dice que mi codigo no funciona  :¬¬
El creador del tema (hervasiop12345 ), el comentario de BlackZeroX (Astaroth) fue en la linea por supuesto no funcionara si se copia tal cual ya que se deben hacer los cambios pertinentes ....

Cita de: RHL en 22 Noviembre 2011, 17:09 PM@rir3760
En mi codigo escribi solo la funcion main, daba por hecho que hibas a hacer tu las declaraciones!
Honestamente no entiendo a que te refieres.

Cita de: RHL en 22 Noviembre 2011, 17:09 PMy pongo el codigo completo para que vean que SI FUNCIONA
Si funciona (tal cual) pero se debe recordar que al utilizar el objeto cin en su forma predeterminada para leer un caracter:
Código (cpp) [Seleccionar]
char ch;

cin >> ch;

Se descarta el espacio blanco (espacio, tabulador, avance de linea, etc.). Primero hay que cambiar el comportamiento del objeto para que no lo ignore (en este momento no recuerdo pero me parece es con un manipulador).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

x64core

Cita de: rir3760 en 22 Noviembre 2011, 18:09 PM
El creador del tema (hervasiop12345 ), el comentario de BlackZeroX (Astaroth) fue en la linea por supuesto no funcionara si se copia tal cual ya que se deben hacer los cambios pertinentes ....
Honestamente no entiendo a que te refieres.
Si funciona (tal cual) pero se debe recordar que al utilizar el objeto cin en su forma predeterminada para leer un caracter:
Código (cpp) [Seleccionar]
char ch;

cin >> ch;

Se descarta el espacio blanco (espacio, tabulador, avance de linea, etc.). Primero hay que cambiar el comportamiento del objeto para que no lo ignore (en este momento no recuerdo pero me parece es con un manipulador).

Un saludo

:laugh:
lo siento bro, hice asi rapido el tema y no me fije, me confundi :xD
y bueno respondiendo a lo que dices, si el codigo necesita ser modificado segun las necesidades que uno tenga no? :)
pero para los que decian que no funcionaba.
me extraña que BlackZeroX (Astaroth) estaba confirmando que no funcionaba osea estaba de acuerdo con el creador del tema
que el, seguramente ni habia agregado las declaraciones...