Cita:
Iniciado por Eternal Idol Tal vez podrias determinar si es un caracter valido (desde 32).

Entiendo sería seguro... ¿pero será necesario??... sería desde el 33 (el 32 es espacio) hasta el 126 (127 es DEL)???... ó hasta el 254??

... como sea, son demasiadas comparaciones

en todo caso lo mejor sería al revés ¿no? ...
Código:
int c_type(char c) {
char i; // con lo que se comparará
int r=1; // para regresar el valor
for(i=0; i<33; i++) // de 0 a 33... ciclo más pequeño
if(c==i) { r=0; break; }
if(r==1&&c==127) r=0; // por DEL
return r;
}
¿qué opinas??...
Cita:
Iniciado por Eternal Idol A simple vista parece correcta, aunque no tiene la funcionalidad exacta de la funcion de C que devuelve valores menores o mayores a cero segun el orden alfabetico (local).

Encontré que sí tiene un error... si comparo "algo" con "algo_otro" me regresaría 0

mi función compararía si string2 empieza con string1

...
Lo que mencionas... la verdad no capto del todo los valores devueltos por strcmp()... pero si se trata de devolver valores positivos ó negativos según el alfabeto.. ¿qué te parece esto?:
Código:
int strcmp(char *str1, char *str2) {
int i, r=0;
for(i=0; str1[i]!='\0' && str2[i]!='\0'; i++) { // Notese agregué otra condicional
if(str1[i] < str2[i]) { r=-1; break; } // Si el primer carácter diferente es "menor" entonces str1 va primero
else if(str1[i] > str2[i]) { r=1; break; } // Lo mismo pero al revés
}
// Pudo no haber diferencias más no significa la palabra sea la misma...
// ejemplo "ala" y "alas" .. entonces quién tenga menos carácteres va primero
if(strlen(str1) < strlen(str2) && r==0) r=-1;
else if(strlen(str1) > strlen(str2) && r==0) r=1;
return r;
}
Debería regresar -1 si str1 se encuentra antes (según alfabeto) que str2, 1 si es lo contrario ó 0 si son iguales... creo ahora sí es correcto

.
Cita:
Iniciado por Eternal Idol strlen funciona bien pero str1 y str2 no tienen el tamaño suficiente para contener esas cadenas
Cierto!

ímbécil de mí.... gracias por la observación.
Cita:
Iniciado por Eternal Idol Para atoi mas o menos tenes que recorrer el array de caracteres y segun la posicion usando el 10 a la potencia de la misma y restandole 48 ('0') al numero que contenga sumarlo a un total.

También muy cierto:
Código:
int atoi(char string[7]) { // Solo hasta un int (de -32768 a 32767)
int i, n=0, tot=0, exp;
for(i=strlen(string)-1; i>=0; i--) {
if(string[i]==45) n=1; // para los negativos... sería necesario un && i==0?
else {
if(i==strlen(string)-1) exp=1; // 10^0=1
else exp*=10; // 10^*
tot+=(string[i]-48)*exp; // Almacenamos total
}
}
if(n==1) tot*=-1; // S¡ se recibió un número negativo
return tot;
}
... Hasta dónde soporta atoi()???... creo un int es más que suficiente... Estoy suponiendo el formato de la cadena es el correcto; ¿sería necesario hacer validaciones?...

que los carácteres correspondan a números, que de haber el signo "-" estubiese a el principio... y creo sería todo... ¿pero cómo regresar un valor de error sí los ocupo todos

???
Cita:
Iniciado por Eternal Idol Las funciones de texto lo siento pero solo conozco las de Windows, que yo sepa cada Sistema Operativo las implementa de diferente manera.
Vale... ni modos... me quedaré con lo que tengo... Una vez creado mi ejecutable ya no hay bronca con lo de los stándares ¿cierto?
Cita:
Iniciado por Eternal Idol fopen puede fallar por no existir el archivo en cuestion o por carecer de permisos sobre el mismo entre otras cosas.
Pero no hay manera de encontrar cuál de esas razónes provocó el fallo??

...
Saludos!
Edito: Una tonteria... ¿es correcto nombrar a mis funciones como las originales??

Sé que no... por obviedad