Está en la página 1de 5

Cadenas

1. [001.txt]
strcpy - Copia cadenas
dest: donde copiar
src: que copiar

Solución:

char ∗ s t r c p y ( char ∗ d e s t , const char ∗ s r c ) {


char ∗tmp = d e s t ;
while ( ( ∗ d e s t++ = ∗ s r c ++) != ’ \0 ’ )
/∗ n o t h i n g ∗/ ;
return tmp ;
}

2. [002.txt]
strncpy - Copia cadenas pero solo n chars
dest: donde copiar
src: que copiar
count: cuantos caracteres copiar
Si src es mas corta que count se rellena con nulos
Si src es mas larga que count no se agrega null

Solución:

#include <c s t r i n g >


char ∗ s t r n c p y ( char ∗ d e s t , const char ∗ s r c , s i z e t count ) {
char ∗tmp = d e s t ;
while ( count ) {
i f ( ( ∗ tmp = ∗ s r c ) != 0 ) s r c ++;
tmp++;
count −−;
}
return d e s t ;
}

3. [003.txt]
strcat - Agrega una cadena NULL-terminada a otra.
dest: La cadena a agregar
src: La cadena a la que se le agrega

Solución:

char ∗ s t r c a t ( char ∗ d e s t , const char ∗ s r c ) {


char ∗tmp = d e s t ;
while ( ∗ d e s t )
d e s t ++;
while ( ( ∗ d e s t++ = ∗ s r c ++) != ’ \0 ’ )
;
return tmp ;
}

Página 1 de 5
Cadenas

4. [004.txt]
strncat - Agrega una cadena NULL-terminada con una longitud determinada
dest: La cadena que será agregada
src: La cadena a la que se agrega
count: El número máximo de bytes a copiar
A diferencia de strncpy, strncat asegura que el resultado es terminado

Solución:

#include <c s t r i n g >


char ∗ s t r n c a t ( char ∗ d e s t , const char ∗ s r c , s i z e t count ) {
char ∗tmp = d e s t ;
i f ( count ) {
while ( ∗ d e s t )
d e s t ++;
while ( ( ∗ d e s t++ = ∗ s r c ++) != 0 ) {
i f (−−count == 0 ) {
∗ d e s t = ’ \0 ’ ;
break ;
}
}
}
return tmp ;
}

5. [005.txt]
strcmp - Compara dos cadenas
cs: Una cadena
ct: La otra cadena

Solución:

int strcmp ( const char ∗ cs , const char ∗ c t ) {


r e g i s t e r signed char res ;
while ( 1 ) {
i f ( ( r e s = ∗ c s − ∗ c t++) != 0 | | ! ∗ c s++)
break ;
}
return res ;
}

6. [006.txt]
strncmp - Compara dos cadenas hasta una longitud determinada
cs: Una cadena
ct: La otra cadena
count: Numero máximo de bytes a comparar

Solución:

Página 2 de 5
Cadenas

#include <c s t r i n g >


int strncmp ( const char ∗ cs , const char ∗ ct , s i z e t count ) {
r e g i s t e r signed char res = 0;
while ( count ) {
i f ( ( r e s = ∗ c s − ∗ c t++) != 0 | | !
∗ c s++)
break ;
count −−;
}
return res ;
}

7. [007.txt]
strchr - Encuentra la primera ocurrencia de un caracter en una cadena
s: La cadena donde buscar
c: El caracter a buscar

Solución:

char ∗ s t r c h r ( const char ∗ s , int c ) {


f or ( ; ∗ s != ( char ) c ; ++s )
i f ( ∗ s == ’ \0 ’ )
return 0 ;
return ( char ∗ ) s ;
}

8. [008.txt]
strrchr - Encuentra la ultima ocurrencia de un caracter en una cadena
s: La cadena donde buscar
c: El caracter a buscar

Solución:

#include <c s t r i n g >


char ∗ s t r r c h r ( const char ∗ s , int c ) {
const char ∗p = s + s t r l e n ( s ) ;
do {
i f ( ∗ p == ( char ) c )
return ( char ∗ ) p ;
} while (−−p >= s ) ;
return 0 ;
}

9. [009.txt]
strnchr - Busca un caracter en una longitud determinada de una cadena
s: La cadena donde buscar
count: El número de caracteres donde buscar
c: El caracter a buscar

Página 3 de 5
Cadenas

Solución:

#include <c s t r i n g >


char ∗ s t r n c h r ( const char ∗ s , s i z e t count , int c ) {
f or ( ; count−− && ∗ s != ’ \0 ’ ; ++s )
i f ( ∗ s == ( char ) c )
return ( char ∗ ) s ;
return 0 ;
}

10. [010.txt]
strlen - Obtiene la longitud de una cadena
s: La cadena

Solución:

#include <c s t r i n g >


s i z e t s t r l e n ( const char ∗ s ) {
const char ∗ s c ;
f or ( s c = s ; ∗ s c != ’ \0 ’ ; ++s c )
/∗ n o t h i n g ∗/ ;
return s c − s ;
}

11. [011.txt]
strnlen - Obtiene la longitud de una cadena hasta un maximo
s: La cadena
count: La longitud máxima

Solución:

#include <c s t r i n g >


s i z e t s t r n l e n ( const char ∗ s , s i z e t count ) {
const char ∗ s c ;
f or ( s c = s ; count−− && ∗ s c != ’ \0 ’;++ s c )
/∗ n o t h i n g ∗/ ;
return s c − s ;
}

12. [012.txt]
memcpy - Copia un area de memoria sobre otra
dest: Donde copiar
src: Qué copiar
count: Tamaño del area a copiar
No se debe usar esta función para acceder al espacio de E/S, usar en su lugar memcpy toio() o memcpy fromio()

Página 4 de 5
Cadenas

Solución:

#include <c s t r i n g >


void ∗ memcpy ( void ∗ d e s t , const void
∗ s r c , s i z e t count ) {
char ∗tmp = ( char ∗ ) d e s t , ∗ s = ( char
∗) s r c ;
while ( count −−)
∗tmp++ = ∗ s++;
return d e s t ;
}

13. [013.txt]
memmove - Copia un area de memoria a otra
dest: Area donde copiar
src: Area a copiar
count: Tamaño del area.
A diferencia de memcpy(), memmove() trata con areas que se interseccionan

Solución:

#include <c s t r i n g >


void ∗ memmove( void ∗ d e s t , const void
∗ s r c , s i z e t count ) {
char ∗tmp , ∗ s ;
i f ( d e s t <= s r c ) {
tmp = ( char ∗ ) d e s t ;
s = ( char ∗ ) s r c ;
while ( count −−)
∗tmp++ = ∗ s++;
} else {
tmp = ( char ∗ ) d e s t + count ;
s = ( char ∗ ) s r c + count ;
while ( count −−)
∗−−tmp = ∗−−s ;
}
return d e s t ;
}

Página 5 de 5

También podría gustarte