Obviamente que en la librería estándar de C y C++ han metido la mano ingenieros con mucha más preparación que yo, no pretendo superarles ni mucho menos, todavía estoy aprendiendo.
No, la función magnitudTexto(); no añade nada a la función strlen(); de string.h pero en muchas universidades (todavía no estoy en esa edad) tengo constancia de que piden a modo de ejercicio para familiarizarse con eso de los algoritmos y demás hacer implementaciones propias de algunas funciones de la librería stándar (he aquí la mía a modo de aporte).
No te lo tomes a mal, no te estoy quitando el mérito. Simplemente he leído tu mensaje y visto tu código y he contestado en consecuencia. No conozco los detalles particulares y personales que te han llevado a escribir el mensaje.
En cuanto a las otras dos funciones son diferentes de toupper(); y tolower(); en el sentido en que estas dos funciones estándar trabajan con caracteres individuales, teniendo que hacer tú mismo el bucle correspondiente para pasar una cadena entera a mayúsculas o minúsculas. Las funciones de mi aporte no tienen sustituto en el estándar.
Lo de las funciones toupper y tolower es cierto, de hecho mi único comentario acerca de tus funciones sustitutas es que poner a pelo un '32' no es la mejor opción. Eso y lo de las variables estáticas que no tiene ningún sentido.
Una de las razones por la que me registré en el foro fue para aprender, por tanto gracias por tu consejo sobre las variables estáticas de las que no se mucho aunque tengo entendido que si uno llama en sucesivas ocasiones a una función al ser la variable estática sólo se inicializa una vez, mejorando el rendimiento del programa. Me gustaría saber más sobre el tema, al igual que de programación multihilo de la que sólo he tocado un poco en Java.
Te explico un poco acerca de las variables estáticas.
Imagina que quieres una función que vaya sumando valores y te retorne el resultado. Una primera versión de dicha función podría quedar tal que:
int sumador(int valor)
{
int total += valor;
return total;
}
Al ejecutar esto te das cuenta de que SIEMPRE te va a devolver lo mismo que le pases como parámetro, no va a sumar nada y, en resumen, no funciona.
Aquí entran en juego las variables estáticas. Las variables estáticas no pierden su significado al salirse de su ámbito ( esto te toca mirarlo en internet si no sabes qué es que si no me enrollo demasiado ), sino que mantienen su identidad durante la ejecución de la aplicación.
Haciendo un par de cambios conseguimos que la función cumpla su cometido:
int sumador( int valor )
{
static int total = 0;
total += valor;
return total;
}
El asignarle un valor al declarar la variable es algo que sólo se ejecutará la primera vez que se llame al código, el resto del tiempo la variable 'total' recordará el valor que se le asignó la última vez y el sumador funcionará correctamente.
El problema que tienen las variables estáticas en entornos multihilo es que si yo llamo a sumador a la vez desde dos hilos diferentes, al compartirse entre ambos el valor de la variable estática, el resultado va a ser incorrecto porque las instrucciones se van a pisar entre si.