Programacion basica

Solo disponible en BuenasTareas
  • Páginas : 10 (2330 palabras )
  • Descarga(s) : 0
  • Publicado : 10 de junio de 2011
Leer documento completo
Vista previa del texto
Strings (Cadenas de texto)
Contenido del Capítulo:
• • • Introducción Las cadenas por dentro Funciones de manejo de cadenas o strlen o strcpy o strcat o sprintf o strcmp Entrada de cadenas por teclado o scanf o gets o Qué son los buffer y cómo funcionan o getchar Recorrer cadenas con punteros Arrays de cadenas Ordenar un array de cadenas Ejercicios



• • • •

Introducción
Vamos a verpor fin cómo manejar texto con mostrarlo por pantalla.

C, hasta ahora sólo sabíamos cómo

Para empezar diré que en C no existe un tipo string como en otros lenguajes. No existe un tipo de datos para almacenar texto, se utilizan arrays de chars. Funcionan igual que los demás arrays con la diferencia que ahora jugamos con letras en vez de con números. Se les llama cadenas, strings o tiras decaracteres. A partir de ahora les llamaremos cadenas. Para declarar una cadena se hace como un array: char texto[20]; Al igual que en los arrays no podemos meter más de 20 elementos en la cadena. Vamos a ver un ejemplo para mostrar el nombre del usuario en pantalla: #include int main() { char nombre[20]; printf( "Introduzca su nombre (20 letras máximo): " ); scanf( "%s", nombre ); printf( "\nElnombre que ha escrito es: %s\n", nombre ); }

Vemos cosas curiosas como por ejemplo que en el scanf no se usa el símbolo &. No hace falta porque es un array, y ya sabemos que escribir el nombre del array es equivalente a poner &nombre[0]. También puede llamar la atención la forma de imprimir el array. Con sólo usar %s ya se imprime todo el array. Ya veremos esto más adelante. Si alguno viene dealgún otro lenguaje esto es importante: en esto: int main() { char texto[20]; texto = "Hola"; }

C no se puede hacer

Las cadenas por dentro
Es interesante saber cómo funciona una cadena por dentro, por eso vamos a ver primero cómo se inicializa una cadena. #include int main() { char nombre[] = "Gorka"; printf( "Texto: %s\n", nombre ); printf( "Tamaño de la cadena: %i bytes\n", sizeof nombre );} Resultado al ejecutar: Texto: Gorka Tamaño de la cadena: 6 bytes ¡Qué curioso! La cadena es "Gorka", sin embargo nos dice que ocupa 6 bytes. Como cada elemento (char) ocupa un byte eso quiere decir que la cadena tiene 6 elementos. ¡Pero si "Gorka" sólo tiene 5! ¿Por qué? Muy sencillo, porque al final de una cadena se pone un símbolo '\0' que significa "Fin de cadena". De esta forma cuandoqueremos escribir la cadena basta con usar %s y el programa ya sabe cuántos elementos tiene que imprimir, hasta que encuentre '\0'. El programa anterior sería equivalente a: #include int main(int argc,char *argv[]) { char nombre[] = { 'G', 'o', 'r', 'k', 'a', '\0' }; printf( "Texto: %s\n", nombre ); } Aquí ya se ve que tenemos 6 elementos. Pero, ¿Qué pasaría si no pusiéramos '\0' al final?

#includeint main() { char nombre[] = { 'G', 'o', 'r', 'k', 'a' }; printf( "Texto: %s\n", nombre ); } En mi ordenador salía: Texto: GorkaTamaño de la cadena: 5 bytes Pero en el tuyo después de "Gorka" puede aparecer cualquier cosa. Lo que aquí sucede es que no encuentra el símbolo '\0' y no sabe cuándo dejar de imprimir. Afortunadamente, cuando metemos una cadena se hace de la primera forma y el seencarga de poner el dichoso símbolo al final.

C

Es importante no olvidar que la longitud de una cadena es la longitud del texto más el símbolo de fin de cadena. Por eso cuando definamos una cadena tenemos que reservarle un espacio adicional. Por ejemplo: char nombre[6] = "Gorka"; Si olvidamos esto podemos tener problemas.

Funciones de manejo de cadenas
Existen unas cuantas funciones el labiblioteca estándar de cadenas: • • • • • strlen strcpy strcat sprintf strcmp

C para el manejo de

Para usar estas funciones hay que añadir la directiva: #include

strlen
Esta función nos devuelve el número de caracteres que tiene la cadena (sin contar el '\0'). #include #include int main() { char texto[]="Gorka"; int longitud;

longitud = strlen(texto); printf( "La cadena "%s" tiene...
tracking img