Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Diegunix en 18 de Junio de 2008, 04:57:04 PM

Título: Terminacion
Publicado por: Diegunix en 18 de Junio de 2008, 04:57:04 PM
Quiero saber si a termina en un tab, Asumiendo que a es un array de chars
estaria bien asi?




i=0;
while (a[i]!='\0')

 if (a[i]=='/t')

 printf ("Termina con un tab");

Título: Terminacion
Publicado por: synchrnzr en 18 de Junio de 2008, 06:20:55 PM
Así te dirá que termina en tab cuando encuentre el primer tab, aunque no sea el último carácter en el array.

Además eso es algo que podías probar tú mismo muy fácilmente inventándote varias cadenas sin tabs, con varios tabs, con un tab al final. Piensa que los ejercicios son para que uno piense, pruebe, se equivoque, etc... si pones lo primero que te viene a la cabeza para que nosotros te digamos si va o no va, no vas a aprender nada.

:idea: ¡Estimula tus neuronas! :idea:

sync
Título: Terminacion
Publicado por: Mars Attacks en 18 de Junio de 2008, 08:29:34 PM
De todas formas, cortesía de la casa, un consejo: repásate la nomenclatura de los carácteres especiales.
Título: Terminacion
Publicado por: tamat en 18 de Junio de 2008, 10:53:55 PM
barra paquí barra pallá
Título: Terminacion
Publicado por: Pogacha en 19 de Junio de 2008, 04:18:29 AM
falta donde incremente i y lo que te tienes que buscar es el ultimo caracter, o bien el anterior a a=0; para i > 0

int i = 0;
while(a[i]!=0) ++i;
if(i>0)
{
 --i;
 if(a[i]=='/t')  printf("La cadena termina en tab\n");
    else printf("La cadena no termina en tab\n");
} else {
 printf("la cadena no tiene caracteres :X\n");
}


ese:
int i = 0;
while(a[i]!=0) ++i;

es lo mismo que:
int i = strlen(a);
--i puede ser omitido si remplazas por a[i-1]=='/t'
Título: Terminacion
Publicado por: Diegunix en 24 de Junio de 2008, 05:47:32 AM
Y no era lo mismo hacer esto ejemplos

char a[5]

if (a[4]=='\t')
  printf ("Termina con TAB");
   a[5]='\0';
??????????????
Título: Terminacion
Publicado por: dinamic en 24 de Junio de 2008, 04:26:24 PM
Citara[5]='\0';

Con esto accedes fuera del array, con lo que a lo mejor machacas algo importante.

Te aconsejo que te leas los tutoriales que la gente te dió.

Un Saludo
Título: Terminacion
Publicado por: Mars Attacks en 24 de Junio de 2008, 09:22:13 PM
Tu ejemplo es sólo válido para una cadena de cinco carácteres (contando el \0 final). El que ponías al principio es genérico para una cadena de cualquier tamaño.
Título: Terminacion
Publicado por: Javi SJ Cervera en 24 de Junio de 2008, 11:45:52 PM
CitarCon esto accedes fuera del array, con lo que a lo mejor machacas algo importante.
Y aunque no machaque nada importante, nunca se debe escribir en una posición arbitraria de memoria xD
Título: Terminacion
Publicado por: Prompt en 25 de Junio de 2008, 10:01:09 AM
En el caso especifico de saber si el último caracter es tab, como ha apuntado Diegunix:

char a[5]

if (a[4]=='\t')
...

Sino usa un string y haz busqueda "reverse".
Título: Terminacion
Publicado por: Javi SJ Cervera en 25 de Junio de 2008, 11:52:09 AM
Pero no dice si el string va a ser siempre de 5 caracteres, o tendrá un máximo de 5 caracteres. Con el ejemplo "if (a[4]=='\t')" miramos siempre si el quinto carácter es un tab.

Mejor hacerlo con "if (a[strlen(a)-1] == '\t')".
Título: Terminacion
Publicado por: Prompt en 25 de Junio de 2008, 12:14:38 PM
hombre claro, es un ejemplo.
Título: Terminacion
Publicado por: shephiroth en 25 de Junio de 2008, 02:55:04 PM
tabuladores aparte, digo yo q un char a[5] tendra siempre a[4]=0 y habra q comprobar a[3], no??
Aparte, char a[5] no implica que strlen(a) = 5....es mas, es imposible, pq "casto" tiene strlen = 5 pero es un char[6].

Luego aparecen simbolos raros cuando escribimos un char[] en pantalla y no sabemos de donde viene.
Título: Terminacion
Publicado por: Mars Attacks en 26 de Junio de 2008, 09:11:21 PM
Que tú reserves cinco carácteres no implica que el último tenga que ser cero forzosamente. Tú puedes hacer lo que te rote con esos cinco carácteres.

La del strlen igual es la opción más "limpia", pero a bajo nivel no deja de hacer un recorrido previo hasta encontrar y devolver el índice del primer 0 que encuentre en la cadena (que, como acabo de decir, si la cadena no termina en 0 podría ser vayaustéasaberdónde), así que al final, la primera opción del comienzo es la más óptima.
Título: Terminacion
Publicado por: Diegunix en 27 de Junio de 2008, 09:39:20 PM
Oh!! gracias, pueden cerrar el tema.