elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 22:47  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++
| | |-+  Programa en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Imprimir
Autor Tema: Programa en C++  (Leído 644 veces)
agente05

Desconectado Desconectado

Mensajes: 25


el PRESENTE esta en los ADULTOS; el FUTURO esta en


Ver Perfil
Programa en C++
« en: 11 Junio 2008, 22:06 »

estoy haciendo un programita en C++, tengo que reconocer una cadena de caracteres pero devende tener cabeceras, la de inicio es abcd <mensaje> la del final es wxyz pero me deve aceptar si la cadena finaliza con "\n" o" \t" pero no me hacepta la \n o \t como caracter.

esta es la parte de mi codigo donde no lo recomoce

llega la cadena dentro de men
for (x=0; x<=3; x++)
   cabe1
  • = men
  • ;

   if (strcmp(cabe1,"abcd")==0) {

      for (x=(rec-2); x<=rec; x++) {
         fin[y] = men
  • ;
         y=y+1;
      }

      y=0;
      if (strcmp(fin,"\n")==0 || strcmp(fin,"\t")==0) {//aqui no reconoce \n cmo cad
         z=1;

         for (x=(rec-6); x<=rec-3; x++) {
            cabe2[y] = men
  • ;
            y=y+1;
         }
      }

      else {

         for (x=(rec-4); x<=rec; x++) {
            cabe2[y] = men
  • ;
            y=y+1;
         }
      }

espero y le entiendan para ver si me pueden ayudar...
En línea

Agente
HJZR4

Desconectado Desconectado

Mensajes: 98


C0N0C1M13NT0


Ver Perfil
Re: Programa en C++
« Respuesta #1 en: 11 Junio 2008, 22:17 »

Los caracteres se imprimen o se operan con ellos con comillas simples. Las comillas dobles son para cadenas. Has probao con las comillas simples?

Corregidme si me equivoco...
« Última modificación: 11 Junio 2008, 22:19 por HJZR4 » En línea

Para aprender solo hay una solución:
LeeR y Preguntar
agente05

Desconectado Desconectado

Mensajes: 25


el PRESENTE esta en los ADULTOS; el FUTURO esta en


Ver Perfil
Re: Programa en C++
« Respuesta #2 en: 11 Junio 2008, 22:30 »

gracias pero si le pongo comillas simples

if (strcmp(fin,'\n')==0 || strcmp(fin,'\t')==0) {



me marca este error

error C2664: 'strcmp' : cannot convert parameter 2 from 'const char' to 'const char *'

alguna otra cosa?? porque ya estuve buscando pero no encuentro...
En línea

Agente
Cab Calloway
Colaborador

Conectado Conectado

Mensajes: 4.295



Ver Perfil
Re: Programa en C++
« Respuesta #3 en: 11 Junio 2008, 22:35 »

Porque no puedes comparar una cadena con un caracter.

Por lo demás no entiendo ni el código ni lo que quieres decir.

Si es lo que yo creo que es podrías hacer un

Código
if(fin[strlen(fin)] == '\n' || fin[strlen(fin)] =='\t')
« Última modificación: 11 Junio 2008, 22:45 por Pázhitnov » En línea

Max 400; caracteres restantes: 366
HJZR4

Desconectado Desconectado

Mensajes: 98


C0N0C1M13NT0


Ver Perfil
Re: Programa en C++
« Respuesta #4 en: 11 Junio 2008, 22:39 »

Para comparar una cadena de caracteres se usa la función strcmp(); y si te fijas, los argumentos que recibe esa función son const char* (constantes de cadenas). Para comparar caracteres, si no recuerdo mal... es:

Código:
/* Código ... */
char caracter1, caracter2;

if (caracter1 != caracter2)
      cout << "Diferentes." << endl;

else
      cout << "Diferentes." << endl;

/* Código ... */
[/quote]

No hace falta usar función ninguna.

Vuelvo a repetir que si me equivoco, corregidme.
En línea

Para aprender solo hay una solución:
LeeR y Preguntar
agente05

Desconectado Desconectado

Mensajes: 25


el PRESENTE esta en los ADULTOS; el FUTURO esta en


Ver Perfil
Re: Programa en C++
« Respuesta #5 en: 11 Junio 2008, 23:13 »

yo creo que se tiene que utilizar el strcmp porque con el strlen solo me da el total de caracteres y no me sirve

lo que no se es como hacer para que me tomen el "\n" como cadena y poderla comparar ya que en esta parte

if (strcmp(fin,"\n")==0 || strcmp(fin,"\t")==0) {

lo compara pero eunque la cadena fin que es la que esta comparando sea = a "\n" no entra...

o no se si exista otra cosa?????? :-\
En línea

Agente
Lambda

Desconectado Desconectado

Mensajes: 256



Ver Perfil WWW
Re: Programa en C++
« Respuesta #6 en: 12 Junio 2008, 00:01 »

para comparar caracteres se usa if

char a = 'a';
char b = 'b';

if(a == b)
...

para comparar cadenas se usa strcmp
En línea

GunZTracker - Codeado entero en Visual Basic 6

www.gunztracker.com

HJZR4

Desconectado Desconectado

Mensajes: 98


C0N0C1M13NT0


Ver Perfil
Re: Programa en C++
« Respuesta #7 en: 12 Junio 2008, 00:27 »

agente05, estás intentanto operar con el final de una cadena? Si es así, el final de la cadena no es "\n", es '\0', es un carácter especial.
En línea

Para aprender solo hay una solución:
LeeR y Preguntar
agente05

Desconectado Desconectado

Mensajes: 25


el PRESENTE esta en los ADULTOS; el FUTURO esta en


Ver Perfil
Re: Programa en C++
« Respuesta #8 en: 12 Junio 2008, 01:15 »

agente05, estás intentanto operar con el final de una cadena? Si es así, el final de la cadena no es "\n", es '\0', es un carácter especial.



La verdad no se, solo se que me van a dar una cadena que va a tener una cabecera inicial "abcd" despues el mensaje y al final otra cabecera "wxyz" eso ya lo hice pero ahora me piden que si al final de la ultima cabecera me ponen un \n o \t aun asi acepte la cadena...

entonces para ver si esta o no al final de la cadena leo los 2 ultimos caracteres, cuando no son "nn" facil me lo dice, pero cuando si "\n" no lee los caracteres no se si es porque empieza con \

espero y me aya dado a entender...
En línea

Agente
Cab Calloway
Colaborador

Conectado Conectado

Mensajes: 4.295



Ver Perfil
Re: Programa en C++
« Respuesta #9 en: 12 Junio 2008, 01:26 »

¿Y por qué no lees el siguiente a 'z'?

Es decir, si encuentras "wxyz" en la posición i, pues lee i+4 y a ver qué hay.

Te complicas demasiado.
En línea

Max 400; caracteres restantes: 366
agente05

Desconectado Desconectado

Mensajes: 25


el PRESENTE esta en los ADULTOS; el FUTURO esta en


Ver Perfil
Re: Programa en C++
« Respuesta #10 en: 12 Junio 2008, 01:33 »

¿Y por qué no lees el siguiente a 'z'?

Es decir, si encuentras "wxyz" en la posición i, pues lee i+4 y a ver qué hay.

Te complicas demasiado.


el problema no es como leerlo sino como compararlo, lo leo y lo guardo en una variable pero al momento de compararlo

if (strcmp(fin,"\n")==0 || strcmp(fin,"\t")==0) {

e ahi el problema no lo compara se lo salta jamas es = y no entiendo porque...
En línea

Agente
Cab Calloway
Colaborador

Conectado Conectado

Mensajes: 4.295



Ver Perfil
Re: Programa en C++
« Respuesta #11 en: 12 Junio 2008, 02:13 »

Ya te lo hemos dicho un par de veces. No puedes comparar una cadena con un caracter, es como comparar un moco de Galindo con la cabeza de Jordan.

Usa strcspn() para encontrar eso que llamas "cabecera final", y ya está.

Es decir, no uses strcspn(), infórmate mejor de las funciones, porque estás perdido.
En línea

Max 400; caracteres restantes: 366
Flakito81

Desconectado Desconectado

Mensajes: 350



Ver Perfil
Re: Programa en C++
« Respuesta #12 en: 12 Junio 2008, 02:24 »

Debo de estar un poco espeso, pero no entiendo exactamente lo que necesitas. No sé cual es el vector dnd irá la cadena. Imaginemos que se llame vector (soy original ehh)

Código
int main ()
{
  char vector[50];
  char *msg;
 
  printf ("-> "); gets(vector);
  if (vector[strlen(vector)] ==  '\n' || vector[strlen(vector)] == '\t')
     vector[strlen(vector)] = '\x0';  //quitamos el caracter conflictivo
  if (!strncmp(vector, "abcd", 4) && !strncmp(&vector[strlen(vector) - 4], "wxyz", 4))
  {
     printf ("Ok! (la cadena comienza con abdc y termina con wxyz)\n");
     vector[strlen(vector) - 4] = '\x0';  //quitamos la terminacion de la cadena
  }
  else
     printf ("Error: Falla la cabecera (abcd) y/o el cierre (wxyz)\n");
  msg = &vector[4]; //hacemos una copia de la cadena desde el 4º caracter
  printf ("%s\n", msg);  //imprimimos el mensaje (sin cabecera ni cierre)
 
  system("pause>nil");
  return 0;
}    
 
No sé si es lo que estés buscando en caso de que no sea me lo explicas un poco e intento ayudarte.
El programa solo te será válido si sólo hay un \t o \n al final de la cadena, es decir, justo antes de encontrar el '\x0'. Si se permiten mas de un \t o mas de un \n o combinaciones de ellos \t\n, \t\t\n, ... pues podrias hacer un bucle desde el final de la cadena y si el caracter leido es \t o \n poner un \x0 y eso hasta que no sea igual. Algo similar a esto.
Código
i = strlen(vector);
while (vector[i] == '\n' || vector[i] == '\t')
  vector[--i] = 'x0';
 

Un saludo!
En línea
agente05

Desconectado Desconectado

Mensajes: 25


el PRESENTE esta en los ADULTOS; el FUTURO esta en


Ver Perfil
Re: Programa en C++
« Respuesta #13 en: 12 Junio 2008, 16:36 »

Andale " flakito81 " tu si me entendiste solo que sigo molestandote... no se si probaste tu codigo?? porque yo al probarlo y darle la adena "abcdmensajewxyz\n" me me marca el mensaje:
 Error: Falla la cabecera (abcd) y/o el cierre (wxyz)

y al ponerl a cadena " abcdmensajewxyz" ahi si mepone de respuesta "mensaje", que es hasta donde yo llegaba que no me comparaba '\n' o '\t' o no se si sea alguna otra cosa...

espero y puedas ayudarme...
En línea

Agente
Flakito81

Desconectado Desconectado

Mensajes: 350



Ver Perfil
Re: Programa en C++
« Respuesta #14 en: 12 Junio 2008, 17:39 »

\n y \t significa salto de linea y tabulador respectivamente, por tanto si escribes "\n" en una posicion del array habrá \ y en la siguiente n para poner un \n antes de terminar la cadena se lo tienes que añadir tu dentro del código, es decir, forzar que exista ese caracter, otra opción será que sea una cadena leida de un fichero o similar. Para que termine en \t no tienes problema xq sólo es pulsar la tecla tabulador.
En definitiva '\n' y '\t' es un único caracter y "\n" y "\t" son cadena de caracteres por eso no te funciona. Si kieres pones la opcion de incluir un '\n' al final, algo asi:
Código
printf ("agregas salto de linea al final?");
scanf("%c", &resp);
if (resp == 's' || resp == 'S')
{
  len = strlen(vector); //medimos la longitud de la cadena
  vector[len] = '\n';    //añadimos el salto de linea al final
  vector[len + 1] = '\x0'; //cerramos la cadena despues del \n
}
 
asi t quedara algo como abcd Cadena de caracteres wxyz\n\x0"
Otra opcion es que pongas el vector a \x0 antes de leer la frase, haciendolo así te ahorras el paso de poner vector[len + 1] = '\x0;. La forma de hacerlo es: memset(vector, '\x0', sizeof(vector)); o bien memset(vector, '\x0', TAM); dnd TAM sería una macro (#define TAM 30) con el tamaño que tendrá ese vector.
En línea
Páginas: [1] 2 Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC