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/16 00:38] – [Desplegar texto en la salida estándar] 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 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. | ||
| 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.1345077518.txt.gz · Última modificación: por lmateu
