Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Terminacion

Iniciado por Diegunix, 18 de Junio de 2008, 04:57:04 PM

« anterior - próximo »

Diegunix

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");

ascal-C

synchrnzr

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

Mars Attacks

De todas formas, cortesía de la casa, un consejo: repásate la nomenclatura de los carácteres especiales.

tamat

barra paquí barra pallá
Por un stratos menos tenso

Pogacha

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'

Diegunix

Y no era lo mismo hacer esto ejemplos

char a[5]

if (a[4]=='\t')
  printf ("Termina con TAB");
   a[5]='\0';
??????????????
ascal-C

dinamic

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
My nick is dinamic because the day I registered in went through a serious crisis of originality.

Mars Attacks

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.

Javi SJ Cervera

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
== Jedive ==

Prompt

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

Javi SJ Cervera

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')".
== Jedive ==

Prompt

hombre claro, es un ejemplo.

shephiroth

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.

Mars Attacks

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.

Diegunix

Oh!! gracias, pueden cerrar el tema.
ascal-C






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.