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");
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
De todas formas, cortesía de la casa, un consejo: repásate la nomenclatura de los carácteres especiales.
barra paquí barra pallá
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'
Y no era lo mismo hacer esto ejemplos
char a[5]
if (a[4]=='\t')
printf ("Termina con TAB");
a[5]='\0';
??????????????
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
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.
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
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".
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')".
hombre claro, es un ejemplo.
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.
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.
Oh!! gracias, pueden cerrar el tema.