strings - cadenas de caracteres - algoritmos análogos (c-c++)
DESCRIPTION
Se expone el desarrollo de ciertos algoritmos análogos a los ya conocidos de la librería “string.h”, la cual permite operar con cadenas de caracteres.TRANSCRIPT
StringsCadenas de caracteres - Algoritmos análogos (C/C++)
Abril [email protected]
Agustín A. Nahuel González
En el presente documento se expone el desarrollo de ciertos algoritmos análogos a los ya conocidos de la librería “string.h”, la cual permite operar con cadenas de caracteres. Estas funciones fueron realizadas en base a un trabajo de cursada del año 2010 solicitado en la UTN FRGP (carrera TSP). Por sus características, me pareció bastante útil compartir algunas de las funciones más interesantes (en su mayoría sencillas):1. Strlen2. Strcpy3. Strcat4. Strcmp5. Strtolower6. Inttostr Aclaración: El nombre propio de esta librería es “strings.h”, con la “s” agregada. Todas las funciones se encuentran correctamente documentadas para facilitar su entendimiento.
Descripción
Documentación// ARCHIVO : strings.h// LIBRERIA : strings.h// AUTOR : Agustin Gonzalez// VERSION : 1.0// MODIFICADO : 14/05/2010// SIST. OPERATIVO: Windows 98/2000/XP/Vista/7.// IDE : Code::Blocks.// COMPILADOR : GNU GCC Compiler (Mingway).// LICENCIA : Software Libre.// DESCRIPCION : Contiene las funciones de la libreria strings.h
#ifndef STRINGS_C_INCLUDED#define STRINGS_C_INCLUDED#include <iostream>using namespace std;#endif // STRINGS_C_INCLUDED
strlen()// FUNCION : strlen.// ACCION : Cuenta la cantidad de caracteres que integran una cadena.// PARAMETROS : Cadena (cad)// RETORNO : Entero que representa la cantidad de caracteres (i).
int strlen (char *cad){ short i=0;
// Se cuenta veces que se ejecuta el ciclo, hasta fin de cadena. while (cad[i] != '\0') i++; return i;}
strcpy()// FUNCION : strcpy.// ACCION : Copia una cadena en otra.// PARAMETROS : Cadena Destino (caddest), Cadena Fuente (cadfuent)// RETORNO : Ninguno.
void strcpy(char *caddest, char*cadfuent){ short i=0; while(cadfuent[i]!= '\0') { // Se copia caracter a caracter "cadfuent" a "caddest" caddest[i]=cadfuent[i]; i++; } // Se es limitado el ultimo valor de caddest[i] al '\0' caddest[i]='\0'; return;}
strcat()// FUNCION : strcat.// ACCION : Concatena.// PARAMETROS : Cadena Inicial (cadinic), Cadena Final (cadfin).// RETORNO : Ninguno.
void strcat(char *cadinic, char*cadfin){ short i=0, j=0; // Tamaño de cadinic para comenzar la copia desde el '\0' de cad. // Se utiliza la funcion strlen, de la misma libreria. i=strlen(cadinic); while (cadfin[j]!='\0') { cadinic[i]=cadfin[j]; j++; i++; } // Se es limitado cadinic[i], una vez fuera del ciclo al nuevo '\0'. cadinic[i]=0; return;}
strcmp()// FUNCION : strcmp.// ACCION : Compara dos cadenas.// PARAMETROS : cadena1 (cad1), cadena2 (cad2).// RETORNO : Entero que representa que cadena es mayor (x).
int strcmp (char*cad1, char*cad2){ short i=0, x; while (cad1[i]!=0 || cad2[i]!=0) { if ((x=cad1[i]-cad2[i])!=0) return x; //Si la resta ASCII da un valor diferente de 0, el mismo es retornado. i++; } // Si la resta nunca dio un valor <> de 0, este se retorna directamente. return 0;}
strtolower()// FUNCION : strtolower.// ACCION : Convierte una cadena a minisculas.// PARAMETROS : Cadena (cad).// RETORNO : Ninguno.// NOTA : Los caracteres especiales pueden variar en Linux.
void strtolower(char *cad){ short i=0; while (cad[i]!=0) { if (cad[i]>60 && cad[i]<91) cad[i]+=32; if (cad[i]==-91) cad[i]-=1; // Ñ if (cad[i]==-23) cad[i]-=70; // Ú if (cad[i]==-32) cad[i]-=62; // Ó if (cad[i]==-42) cad[i]-=53; // Í if (cad[i]==-75) cad[i]-=21; // Á if (cad[i]==-112) cad[i]-=14; // É i++; } return;}
inttostr() - 1 de 2// FUNCION : inttostr.// ACCION : Convierte un entero a cadena.// PARAMETROS : Cadena (cad) , Numero a convertir (n).// RETORNO : Ninguno.// NOTA : No valida ingreso de caracteres no permitidos.
void inttostr(char*cad, int n){ short i=0, cont=0; bool neg=false; // Indica negatividad de numero. if (n<0) { neg=true; // El numero es negativo. n*=-1; // Coversion del numero a positivo cad[0]='-'; // cad[0] indicara la negatividad. } int ntemp=n; while(ntemp>0) { ntemp/=10; // ntemp evita la modificacion del "n" original. cont++; // Contador de cantidad de digitos. }[...]
inttostr() - 2 de 2[...]if(neg==true) // Número negativo { // cad[0], sera utilizado, en este caso, para alojar el '-' que indique negatividad. cad[cont+1]=0; for(i=cont;i>0;i--) { // Se es sumado el ASCII 48(0) al resto del numero, para ser insertado en cad[i]. cad[i]=(n%10)+48; // Se reduce n, para obtener proximo numero. n/=10; } } else // Número positivo { cad[cont]=0; cont--; for(i=cont;i>=0;i--)
{ cad[i]=(n%10)+48; n/=10;
} } return;}
[Fin de la presentación]Agustín A. Nahuel González