strings - cadenas de caracteres - algoritmos análogos (c-c++)

12
Strings Cadenas de caracteres - Algoritmos análogos (C/C++)

Upload: agustin-gonzalez

Post on 26-Jun-2015

931 views

Category:

Software


2 download

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

Page 1: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

StringsCadenas de caracteres - Algoritmos análogos (C/C++)

Page 2: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

Abril [email protected]

Agustín A. Nahuel González

Page 3: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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

Page 4: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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

Page 5: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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;}

Page 6: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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;}

Page 7: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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;}

Page 8: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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;}

Page 9: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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;}

Page 10: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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. }[...]

Page 11: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

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;}

Page 12: Strings - Cadenas de caracteres - Algoritmos análogos (C-C++)

[Fin de la presentación]Agustín A. Nahuel González