Páginas: [1] 2
|
 |
|
Autor
|
Tema: Programa en C++ (Leído 644 veces)
|
agente05
Desconectado
Mensajes: 25
el PRESENTE esta en los ADULTOS; el FUTURO esta en
|
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 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
Mensajes: 98
C0N0C1M13NT0
|
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
Mensajes: 25
el PRESENTE esta en los ADULTOS; el FUTURO esta en
|
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
Mensajes: 4.295
|
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 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
Mensajes: 98
C0N0C1M13NT0
|
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 ... */ 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
Mensajes: 25
el PRESENTE esta en los ADULTOS; el FUTURO esta en
|
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
|
para comparar caracteres se usa if
char a = 'a'; char b = 'b';
if(a == b) ...
para comparar cadenas se usa strcmp
|
|
|
|
|
En línea
|
|
|
|
HJZR4
Desconectado
Mensajes: 98
C0N0C1M13NT0
|
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
Mensajes: 25
el PRESENTE esta en los ADULTOS; el FUTURO esta en
|
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
Mensajes: 4.295
|
¿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
Mensajes: 25
el PRESENTE esta en los ADULTOS; el FUTURO esta en
|
¿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
Mensajes: 4.295
|
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
Mensajes: 350
|
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) 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. i = strlen(vector); while (vector[i] == '\n' || vector[i] == '\t') vector[--i] = 'x0'; Un saludo!
|
|
|
|
|
En línea
|
|
|
|
agente05
Desconectado
Mensajes: 25
el PRESENTE esta en los ADULTOS; el FUTURO esta en
|
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
Mensajes: 350
|
\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: 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
|
|
|
|