Defina 2 cadenas y copie el contenido de la segunda cadena al final de la primera.
7.3 Matriz de caracteres
La matriz utilizada para almacenar la cantidad de caracteres se llama matriz de caracteres.
7.3.1 Definición de matriz de caracteres
La forma de matriz de caracteres es la misma que la matriz numérica introducida anteriormente.
Por ejemplo: char c[10];
Dado que el tipo de carácter y el tipo de entero son comunes, también se puede definir como int c[10] pero en este caso cada elemento de la matriz Ocupa una unidad de memoria de 2 palabras.
Las matrices de caracteres también pueden ser matrices bidimensionales o multidimensionales.
Por ejemplo: char c[5][10];
Es una matriz de caracteres bidimensional.
7.3.2 Inicialización de la matriz de caracteres
La matriz de caracteres también permite la asignación de inicialización durante la definición.
Por ejemplo:
char c[10]=;
El valor de cada elemento después de la asignación es:
Matriz C c [0 El valor de ] es 'c'
El valor de c[1] es ' '
El valor de c[2] es 'p'
c[3 El valor de ] es 'r'
El valor de c[4] es '0'
El valor de c[5] es 'g'
c[ El valor de 6] es 'r'
El valor de c[7] es 'a'
El valor de c[8] es 'm'
donde a c[9] no se le asigna un valor y el sistema asigna automáticamente un valor de 0 porque el valor es 'p'.
La especificación de longitud también se puede omitir al asignar valores iniciales a todos los elementos.
Por ejemplo:
char c[]=;
En este momento, la longitud de la matriz C se establece automáticamente en 9.
7.3.3 Referencia a matriz de caracteres
main()
{
int i, j
char a[][5]=, };
for(i=0;ilt;=1;i)
{
for(j =0;jlt;=4;j)
printf("c", a[i][j]);
printf("\n");
}
}
Dado que a todos los elementos de la matriz de caracteres bidimensionales en este ejemplo se les asignan valores iniciales durante la inicialización, la longitud del subíndice unidimensional no es necesario especificarlo.
7.3.4 Cadenas y indicadores de fin de cadena
No existe una variable de cadena especial en lenguaje C. Generalmente se usa una matriz de caracteres para almacenar una cadena. Al presentar las constantes de cadena anteriormente, se explicó que las cadenas siempre terminan con '\0' como terminador. Por lo tanto, cuando una cadena se almacena en una matriz, el terminador '\0' también se almacena en la matriz y se utiliza como señal de si la cadena termina. Con el indicador '\0', no es necesario utilizar la longitud de la matriz de caracteres para determinar la longitud de la cadena.
El lenguaje C permite la inicialización y asignación de arrays en forma de cadenas.
Por ejemplo:
char c[]=;
Se puede escribir como:
char c[]=; p>
O elimine {} y escríbalo como:
char c[]="Programa C"
Asignar en modo cadena ocupa un byte más que asignar un carácter; por carácter. , utilizado para almacenar el indicador de fin de cadena '\0'. La situación de almacenamiento real de la matriz c anterior en la memoria es:
C p r o g r a m \0
El sistema de compilación C agrega automáticamente '\0'.
Dado que se utiliza el indicador '\0', generalmente no es necesario especificar la longitud de la matriz al asignar un valor inicial con una cadena, y el sistema lo manejará por sí mismo.
7.3.5 Entrada y salida de matrices de caracteres
Después de usar el método de cadena, la entrada y salida de matrices de caracteres será simple y conveniente.
Además del método anterior de asignar un valor inicial con una cadena, también puede usar la función printf y la función scanf para generar e ingresar una cadena en una matriz de caracteres a la vez, en lugar de usar un Declaración de bucle para ingresar y generar cada carácter uno por uno.
main()
{
char c[]="BASIC\ndBASE";
printf("s\n" , c);
}
Tenga en cuenta que en la función printf de este ejemplo, la cadena de formato utilizada es "s", lo que significa que la salida es una cadena. Es posible proporcionar el nombre de la matriz en la columna de la tabla de salida. No se puede escribir como:
printf("s", c[];
main()
{
char); st[ 15];
printf("cadena de entrada:\n");
scanf("s", st
printf("s); \n ", st);
}
En este ejemplo, dado que la longitud de la matriz se define como 15, la longitud de la cadena de entrada debe ser menor que 15 para dejar un byte para almacenar caracteres Indicador de fin de cadena `\0`. Cabe señalar que para una matriz de caracteres, si no se realiza ninguna asignación de inicialización, se debe especificar la longitud de la matriz. También debe tenerse en cuenta que cuando se utiliza la función scanf para ingresar una cadena, la cadena no puede contener espacios; de lo contrario, se utilizará un espacio como terminador de la cadena.
Por ejemplo, cuando la cadena de entrada contiene espacios, la situación de operación es:
cadena de entrada:
este es un libro
El resultado es:
este
Se puede ver en el resultado que los caracteres después de los espacios no se pueden generar. Para evitar esta situación, puede configurar varias matrices de caracteres más para almacenar cadenas que contengan espacios en segmentos.
El programa se puede reescribir de la siguiente manera:
main()
{
char st1[6], st2[6] , st3[ 6], st4[6];
printf("cadena de entrada:\n");
scanf("ssss", st1, st2, st3, st4) ;
p>
printf("s s s s\n", st1, st2, st3, st4
}
Este programa configura cuatro matrices respectivamente, e ingresa una línea de caracteres. Los segmentos de espacio se cargan en cuatro matrices respectivamente. Luego genere las cadenas en estas cuatro matrices respectivamente.
Como se indicó anteriormente, cada elemento de entrada de scanf debe aparecer en forma de dirección, como amp a, amp b, etc. Pero en el ejemplo anterior, aparece como un nombre de matriz. ¿Por qué sucede esto?
Esto se debe a que en el lenguaje C, el nombre de la matriz representa la primera dirección de la matriz. Toda la matriz es una unidad de memoria contigua que comienza con la primera dirección.
Si hay una matriz de caracteres char c[10], se puede representar en la memoria como se muestra en la figura.
C[0] C[1] C[2] C[3] C[4] C[5] C[6] C[7] C[8] C[9]
Supongamos que la primera dirección de la matriz c es 2000, lo que significa que la dirección de la unidad c[0] es 2000. Entonces el nombre de la matriz c representa esta primera dirección. Por lo tanto, el operador de dirección amp no se puede agregar antes de c. Por ejemplo, escribir scanf ("s", amp; c);
Al ejecutar la función printf ("s", c), busque la primera dirección de acuerdo con el nombre de la matriz c y luego genere cada carácter de la matriz uno por uno hasta encontrar el indicador de terminación de cadena '\0'.
7.3.6 Funciones de procesamiento de cadenas
El lenguaje C proporciona una gran cantidad de funciones de procesamiento de cadenas, que se pueden dividir aproximadamente en entrada, salida, fusión, modificación, comparación y conversión de cadenas. , copiar y buscar categorías. El uso de estas funciones puede reducir en gran medida la carga de programación. Las funciones de cadena utilizadas para entrada y salida deben incluir el archivo de encabezado "stdio.h" antes de su uso. Cuando se utilizan otras funciones de cadena, se debe incluir el archivo de encabezado "string.h".
A continuación se presentan algunas de las funciones de cadena más utilizadas.
1. Función de salida de cadena puts
Formato: puts (nombre de la matriz de caracteres)
Función: muestra la cadena en la matriz de caracteres en la pantalla. Es decir, la cadena se muestra en la pantalla.
#include "stdio.h"
main()
{
char c[]="BASIC\ndBASE";
puts(c);
}
Se puede ver en el programa que los caracteres de escape se pueden usar en la función puts, por lo que el resultado de salida se convierte en dos líneas. La función puts puede ser reemplazada completamente por la función printf. Cuando se requiere la salida en un formato determinado, generalmente se usa la función printf.
2. La función de entrada de cadena obtiene
Formato: obtiene (nombre de la matriz de caracteres)
Función: ingresa una cadena desde el teclado del dispositivo de entrada estándar.
Esta función obtiene un valor de función, que es la primera dirección de la matriz de caracteres.
#include "stdio.h"
main()
{
char st[15];
printf("cadena de entrada:\n");
obtiene(st);
puts(st); p> Se puede ver que cuando la cadena de entrada contiene espacios, la salida sigue siendo la cadena completa. Explique que la función gets no utiliza un espacio como signo del final de la entrada de cadena, sino solo un retorno de carro como final de la entrada. Esto es diferente de la función scanf.
3. Función de conexión de cadenas strcat
Formato: strcat (nombre de matriz de caracteres 1, nombre de matriz de caracteres 2)
Función: Concatenar las cadenas en la matriz de caracteres 2 La cadena se conecta al final de la cadena en la matriz de caracteres 1 y se elimina la marca de cadena "\0" después de la cadena 1. El valor de retorno de esta función es la primera dirección de la matriz de caracteres 1.
#include"string.h"
main()
{
static char st1[30]="Mi nombre es ";
int st2[10];
printf("ingrese su nombre:\n");
gets(st2);
strcat(st1, st2);
puts(st1);
}
Este programa combina la matriz de caracteres inicializada y las cadenas de caracteres asignadas dinámicamente. están conectados. Cabe señalar que la matriz de caracteres 1 debe definirse con una longitud suficiente; de lo contrario, la cadena concatenada no se podrá cargar por completo.
4. Función de copia de cadena strcpy
Formato: strcpy (nombre de matriz de caracteres 1, nombre de matriz de caracteres 2)
Función: copiar la cadena en la matriz de caracteres 2 La cadena se copia en la matriz de caracteres 1. También se copia el indicador de final de cadena "\0".
Nombre del número de carácter 2, que también puede ser una constante de cadena. Esto equivale a asignar una cadena a una matriz de caracteres.
#include "string.h"
main()
{
char st1[15], st2[]=" Lenguaje C";
strcpy(st1, st2);
puts(st1); printf("\n");
}
Esta función requiere que la matriz de caracteres 1 tenga una longitud suficiente; de lo contrario, la cadena copiada no se podrá cargar por completo
.
5. Función de comparación de cadenas strcmp
Formato: strcmp (nombre de matriz de caracteres 1, nombre de matriz de caracteres 2)
Función: compara dos caracteres en orden de código ASCII. cadenas en una matriz, y el resultado de la comparación lo devuelve el valor de retorno de la función.
Cadena 1 = Cadena 2, valor de retorno = 0
Cadena 2 > Cadena 2, valor de retorno > 0
Cadena 1 〈Cadena 2, retorno; valor〈0.
Esta función también se puede utilizar para comparar dos constantes de cadena, o comparar matrices y constantes de cadena.
#include "string.h"
main()
{ int k
static char st1[15], st2 []="Lenguaje C";
printf("ingrese una cadena:\n");
gets(st1); st1, st2);
if(k==0) printf("st1=st2\n");
if(kgt;0) printf("st1gt;st2\ n");
if(klt;0) printf("st1lt;st2\n");
}
En este programa, los caracteres de entrada La cadena se compara con la cadena en la matriz st2, el resultado de la comparación se devuelve a k y la cadena del mensaje de resultado se genera en función del valor k. Cuando la entrada es dbase, se puede ver en el código ASCII que "dBASE" es mayor que "Lenguaje C", por lo que k>0, y el resultado de salida es "st1gt; st2".
6. Función de medición de longitud de cadena strlen
Formato: strlen (nombre de matriz de caracteres)
Función: mide la longitud real de una cadena (excluyendo cadenas) Fin flag '\0') y valor de retorno como función.
#include "string.h"
main()
{ int k
static char st[]="C language";
k=strlen(st);
printf("La longitud de la cadena es d\n", k);
}
7.4 Ejemplo de programa
Ingrese los nombres de cinco países y envíelos en orden alfabético.
La idea de programación para esta pregunta es la siguiente: los cinco nombres de países deben procesarse mediante una matriz de caracteres bidimensional. Sin embargo, el lenguaje C estipula que una matriz bidimensional puede tratarse como múltiples matrices unidimensionales. Por lo tanto, esta pregunta se puede procesar como cinco matrices unidimensionales, y cada matriz unidimensional es una cadena de nombre de país. Utilice la función de comparación de cadenas para comparar el tamaño de cada matriz unidimensional, ordenarla y generar el resultado.
La programación es la siguiente:
main()
{
char st[20], cs[5][20 ];
int i, j, p;
printf("ingrese el nombre del país:\n"); 5; i )
obtiene(cs[i]);
printf("\n"); ; i )
{ p=i;strcpy(st,cs[i]);
for(j=i 1;jlt;5;j)
if (strcmp(cs[j], st)lt; 0)
if(p!=i)
{
strcpy(st, cs[i ]);
strcpy(cs[i], cs[p]);
strcpy(cs[p],
); } p>
puts(cs[i]);}printf("\n");
}
En la primera declaración for de este programa, el Se utiliza la función get. Ingrese cinco cadenas de nombres de países. Como se mencionó anteriormente, el lenguaje C permite que una matriz bidimensional se procese como múltiples matrices unidimensionales. Este programa muestra que cs [5] [20] es una matriz de caracteres bidimensional, que se puede dividir en cinco unidimensionales. matrices cs[0], cs[1], cs[2], cs[3], cs[4]. Por lo tanto, es legal utilizar cs[i] en la función gets. En la segunda declaración for, se anida otra declaración for para formar un bucle doble. Este doble bucle hace el trabajo de ordenar alfabéticamente. En el bucle externo, copie la cadena del nombre del país en la matriz de caracteres cs[i] a la matriz st y asigne el subíndice i a P. Después de ingresar al bucle interno, compare st con cada cadena después de cs [i]. Si hay una más pequeña que st, copie la cadena a st y asigne su subíndice a p. Una vez completado el ciclo interno, si p no es igual a i, significa que aparece una cadena más pequeña que cs[i], por lo que se intercambian los contenidos de cs[i] y st. En este punto, se ha determinado el valor de clasificación del i-ésimo elemento de la matriz cs. Luego genera la cadena. Toda la clasificación y salida se completarán una vez que se complete el bucle externo.
7.5 Resumen de este capítulo
1. La matriz es la estructura de datos más utilizada en programación. Las matrices se pueden dividir en matrices numéricas (matrices de enteros, matrices reales), matrices de caracteres, matrices de punteros, matrices de estructuras, etc., que se presentarán más adelante.
2. Los arrays pueden ser unidimensionales, bidimensionales o multidimensionales.
3. La descripción del tipo de matriz consta de tres partes: especificador de tipo, nombre de la matriz y longitud de la matriz (número de elementos de la matriz). Los elementos de una matriz también se denominan variables de subíndice. El tipo de matriz se refiere al tipo de valor de la variable de subíndice.
4. La asignación a una matriz se puede lograr mediante tres métodos: asignación de inicialización de matriz, asignación dinámica de función de entrada y asignación de declaración de asignación. Para matrices numéricas, las declaraciones de asignación no se pueden usar para asignar valores, entradas o salidas en su conjunto, pero se deben usar declaraciones de bucle para operar en los elementos de la matriz uno por uno.