Cómo utilizar punteros y cadenas en la programación c
El lenguaje de programación C carece de una variable de cadena, pero tiene la matriz de caracteres, que es efectivamente la misma cosa. Como una matriz, una cadena en C puede ser completamente torcido, torque y abusado por el uso de punteros. Es un tema mucho más interesante que jugar con matrices numéricas.
Conteúdo
Cómo utilizar punteros a mostrar una cadena
Lo más probable es familiarizado con la visualización de una cadena en C, probablemente mediante el uso de cualquiera de las funciones de los puts () o printf (). Cuerdas, también, se pueden mostrar un carácter la vez laborioso a través de una matriz.
HOLA, CADENA
#include principal) {muestra de carbón int ([] = "¿De dónde vendrá mi socorro n?" índice -INT = 0-tiempo (muestra [índice] = ' 0'!) {putchar (muestra [índice]) - Índice ++ -} return (0) -}
El código que se muestra en el Hola, cuerdas es código C completamente legítimo, válido para crear un programa que muestra una cadena. Pero no utiliza punteros, lo hace?
Ejercicio 1: Modificar el código fuente de Hello, Cadena, en sustitución de la notación matriz con la notación de puntero. Elimina la variable de índice. Es necesario crear e inicializar una variable puntero.
Evaluación del bucle while en Hola, cuerdas es redundante. El carácter nulo evalúa como falsa. Así que la evaluación podría ser reescrita como
mientras que (muestra [índice])
Mientras el elemento de la matriz al que hace referencia la muestra [Índice] no es un carácter nulo, el bucle de gira.
Ejercicio 2: Edite la evaluación del bucle while en su solución para el Ejercicio 1, lo que elimina la comparación redundante.
Ejercicio 3: Continuar trabajando en el código, y esta vez a eliminar las sentencias en el bucle while. Coloque toda la acción en la evaluación de la sentencia while. En aras de la referencia, la función putchar () devuelve el carácter que se muestra.
Cómo declarar una cadena utilizando un puntero
He aquí un truco miedo se puede tirar el uso de punteros, uno que viene con un bote lleno de precaución. Considere un puntero anuncia una cadena.
UN PUNTERO ANUNCIA UNA CADENA
#include int main () {char * Muestra = "¿De dónde vendrá mi socorro n?" -mientras (putchar (* Muestra ++)) - retorno (0) -}
En un puntero anuncia una cadena, la cadena que se muestra es creado por inicializar un puntero. Es una construcción que parece extraño, pero es algo que usted es testigo a menudo en código C, sobre todo con cuerdas. (No puede utilizar esta convención para inicializar una matriz numérica.)
Ejercicio 4: Copie el código fuente de un puntero anuncia una cadena en su editor. Genere y ejecute.
El bote lleno de precaución en un puntero anuncia una cadena, y en cualquier momento que usar un puntero para declarar directamente una cadena, es que la variable puntero no se puede manipular o de lo contrario se pierde la cadena.
Por ejemplo, en un puntero anuncia una cadena, la muestra variable se utiliza en la línea 7 al paso a través de la cadena como parte de la función putchar (). Vaya. Si wantto utilizar muestra más adelante en el código, que ya no hacer referencia al inicio de la cadena.
Al declarar una cadena mediante el uso de un puntero, no te metas con la variable de puntero en el código en otro lugar.
La solución es guardar la dirección inicial del puntero o simplemente utilizar un segundo puntero a trabajar en la cadena.
Ejercicio 5: Fijar el código en un puntero anuncia una cadena para que el muestra el valor de la variable se guarda antes de las carreras mientras bucle y luego se restablece después. Añadir un comunicado puts (muestra) al código después del bucle while se realiza la ejecución, para demostrar que la dirección original de la variable se restablece.
Cómo ordenar cadenas
Tomando lo que sabes de la clasificación en el lenguaje C, es probable que pueda elaborar un programa de la cadena de clasificación decente. O, como mínimo, se puede explicar cómo se hace. ¡Eso es genial! Pero es un montón de trabajo.
¿Qué es mejor a la hora de clasificar las cadenas no es para ordenar las cuerdas en absoluto. No, en cambio, a ordenar un array de punteros que hacen referencia a las cuerdas. Clasificación Cuerdas, intento inicial muestra un ejemplo.
CLASIFICACION DE CUERDAS, INTENTO INICIAL
#include int main () {char * fruta [] = {"albaricoque", "banana", "piña", "manzana", "caqui", "pera", "blueberry"} - char * temp-int a, b, (a = 0-alt, de 6 a ++) x-para para (b = a + 1-blt; 7-b ++) si (* (fruta + a)> * (fruta + b)) {temp = * (fruta + a) - * (fruta + a) = * (fruta + b) - * (fruta + b) = TEMP-} para (x = 0-XLT; 7-x ++) puts (fruta [x]) - volver (0) -}
Ejercicio 6: Escriba el código fuente de Ordenación de Cuerdas, intento inicial en su editor. Genere y ejecute para asegurar que las cuerdas están debidamente ordenados.
Bueno, es probable que no funcionaba. Puede tener, pero si la lista está ordenada o se cambia de ninguna manera, es una consecuencia no deseada y, definitivamente, no repetible.
El problema está en la línea 19. No se puede comparar cadenas con el operador>. Puede comparar los caracteres individuales y se podía continuación, ordenar la lista sobre la base de esos personajes, pero la mayoría de los seres humanos prefieren palabras ordenados a través de toda su longitud, no sólo el primer carácter.
Ejercicio 7: Modificar el código fuente, y utilizar la función strcmp () para comparar cadenas para determinar si necesitan ser cambiados.