strings
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
strings [2012/08/15 21:49] – [Desplegar texto en pantalla] lmateu | strings [2015/03/31 12:50] (actual) – [Leer de la entrada estándar] lmateu | ||
---|---|---|---|
Línea 13: | Línea 13: | ||
Tanto r como s representan el mismo string. | Tanto r como s representan el mismo string. | ||
- | {{ :strings.png? | + | {{ :strings2.png? |
La única diferencia es que el string " | La única diferencia es que el string " | ||
Línea 21: | Línea 21: | ||
r[0]= ' | r[0]= ' | ||
</ | </ | ||
+ | |||
+ | ==== Funciones para manipular strings ==== | ||
Hay varias funciones que permiten manipular strings: | Hay varias funciones que permiten manipular strings: | ||
Línea 26: | Línea 28: | ||
^ Nombre ^ Ejemplo ^ Descripción ^ | ^ Nombre ^ Ejemplo ^ Descripción ^ | ||
| strlen | int l= strlen(" | | strlen | int l= strlen(" | ||
+ | | strcmp | strcmp(fuente, | ||
+ | | strncmp | strncmp(fuente, | ||
| strcpy | strcpy(dest, | | strcpy | strcpy(dest, | ||
| strncpy | strncpy(dest, | | strncpy | strncpy(dest, | ||
| strcat | strcat(dest, | | strcat | strcat(dest, | ||
+ | * La función strcmp entrega < 0 si el primer argumento es lexicográficamente menor que el segundo, 0 si son iguales y > 0 si es mayor. | ||
+ | * La función strncmp es similar solo que compara hasta n caracteres. | ||
* Antes de invocar strcpy y strcat se debe reservar suficiente memoria en dest para almacenar el resultado. | * Antes de invocar strcpy y strcat se debe reservar suficiente memoria en dest para almacenar el resultado. | ||
* En el caso de strncpy, se debe reservar exactamente n caracteres. | * En el caso de strncpy, se debe reservar exactamente n caracteres. | ||
Línea 37: | Línea 43: | ||
strcat( strcat ( strcpy (t, " | strcat( strcat ( strcpy (t, " | ||
</ | </ | ||
+ | |||
+ | === Ejemplos === | ||
+ | |||
+ | Las siguientes son implementaciones ultra compactas de strlen y strcpy: | ||
+ | |||
+ | < | ||
+ | int strlen(char *s) { | ||
+ | char *r= s; | ||
+ | while (*r++) | ||
+ | ; | ||
+ | return r-s-1; | ||
+ | } | ||
+ | |||
+ | char *strcpy(char *d, char *s) { | ||
+ | char *t= d; | ||
+ | while (*t++ = *s++) | ||
+ | ; | ||
+ | return d; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Ejercicio 1 === | ||
+ | |||
+ | Resuelva la pregunta 1 del [[http:// | ||
==== Desplegar texto en la salida estándar ==== | ==== Desplegar texto en la salida estándar ==== | ||
Línea 49: | Línea 79: | ||
</ | </ | ||
- | El caracter ' | + | El caracter ' |
En Unix Ud. puede obtener una detallada documentación (aunque críptica) de una función en C mediante el comando man de Unix: | En Unix Ud. puede obtener una detallada documentación (aunque críptica) de una función en C mediante el comando man de Unix: | ||
Línea 61: | Línea 91: | ||
^ función ^ ejemplo ^ descripción ^ | ^ función ^ ejemplo ^ descripción ^ | ||
| fprintf(// | | fprintf(// | ||
- | | sprintf(// | + | | sprintf(// |
* La variable stderr corresponde a la salida estándar de errores. | * La variable stderr corresponde a la salida estándar de errores. | ||
* En el caso de escribir en un string, es reponsabilidad del progrador reservar suficiente espacio en el string. | * En el caso de escribir en un string, es reponsabilidad del progrador reservar suficiente espacio en el string. | ||
- | === Ejercicio | + | === Ejemplo |
El siguiente programa convierte los números en hexadecimal de la línea de comandos a decimal: | El siguiente programa convierte los números en hexadecimal de la línea de comandos a decimal: | ||
Línea 124: | Línea 154: | ||
* argv[0] siempre corresponde al nombre del ejecutable. | * argv[0] siempre corresponde al nombre del ejecutable. | ||
+ | === Ejercicio 2 === | ||
+ | |||
+ | Programe la función que lleva un string a letras mayúsculas. | ||
+ | |||
+ | < | ||
+ | int main() { | ||
+ | char str[80]; | ||
+ | strcpy(str, "el numero pi es 3.14" | ||
+ | mayusculas(str); | ||
+ | printf(" | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
==== Leer de la entrada estándar ==== | ==== Leer de la entrada estándar ==== | ||
Línea 130: | Línea 173: | ||
^ función ^ ejemplo ^ descripción ^ | ^ función ^ ejemplo ^ descripción ^ | ||
| getchar() | '' | | getchar() | '' | ||
- | | gets(// | + | | gets(// |
| fgets(// | | fgets(// | ||
| scanf(// | | scanf(// | ||
- | === Ejercicio === | + | **Observación**: |
+ | y por lo tanto no se debe usar para leer datos de la red o de un archivo de origen desconocido porque puede | ||
+ | ser blanco de ataques de gusanos o virus. | ||
+ | |||
+ | === Ejercicio | ||
El siguiente programa despliega la línea más larga de la entrada estándar: | El siguiente programa despliega la línea más larga de la entrada estándar: | ||
Línea 147: | Línea 194: | ||
int largo= 0; | int largo= 0; | ||
- | while (gets(lin)!=NULL) { | + | |
+ | while (fgets(lin, N, stdin)!=NULL) { | ||
if (strlen(lin)> | if (strlen(lin)> | ||
strcpy(larga, | strcpy(larga, |
strings.1345067346.txt.gz · Última modificación: 2012/08/15 21:49 por lmateu