Hola y bienvenido de nuevo. En esta conferencia, quiero comenzar a hablar sobre funciones de cadena.
Mencioné anteriormente que las
cadenas, las matrices de caracteres no son
un tipo de datos variables en c.
Por lo tanto, puede usar cualquiera de
los operadores, pero aún necesitará poder hacer muchas cosas con cadenas.
Vas a poder manipularlos.
Vas a querer obtener la longitud. Si desea compararlos,
todo tipo de cosas probablemente los conviertan.
Por suerte, la biblioteca estándar viene con un montón de funciones
que puede utilizar para realizar este tipo de operaciones.
Primero empezaré a hablar sobre algunos de los más comunes
y luego pasaremos a algunos más específicos en otras conferencias.
Entonces ya sabemos que una cadena de
caracteres es una matriz de caracteres terminada por un carácter nulo.
Las cadenas de caracteres se utilizan comúnmente en los programas c.
Afortunadamente, C proporciona muchas funciones diseñadas específicamente para trabajar con cadenas.
Los que vamos a discutir son los más comunes que usará.
Primero, obtener la longitud de una cadena usando la función str length.
Copiar una cadena de caracteres a otra.
Recuerde, le dije antes que no puede usar el operador de asignación para asignar una cadena.
Entonces, lo que haces es usar str copy o strn copy.
Además, combinando dos cadenas de caracteres juntas, concatenación.
Hay un gato fuerte y un gato fuerte.
Y determinar si dos cadenas de caracteres son iguales.
Nuevamente, el operador igual a igual no funcionará para comparar cadenas
porque son matrices.
Entonces, si desea comparar cadenas, debe usar funciones especiales proporcionadas
por la biblioteca c. Str compare y strn compare.
Primero, hablemos de la longitud.
Todas estas funciones están definidas en la cadena. archivo de encabezado, por lo
que debe incluirlo cuando llame o invoque una de estas funciones.
Obteniendo la longitud de una cuerda.
Str length es una función que encuentra la longitud de la cadena, es bastante sencillo.
Se devuelve como una variable de tamaño t.
Puede usar la variable size t indistintamente con un int.
Pero primero, tendrá que incluir ese archivo de encabezado de cadena si desea usar str length y
así es como lo usa.
Básicamente, crea un literal de cadena entre comillas dobles y lo asigna a una matriz de caracteres.
No especificas el tamaño de la matriz de caracteres.
El compilador lo hará por usted y agregará el terminador nulo.
Una vez que haya definido mi cadena con
una constante de cadena, puede llamar a str length y simplemente pasar ese
carácter, bastante bien.
Es uno de los que se usan con más frecuencia porque a menudo desea obtener esta longitud
de una cadena cuando realiza verificaciones de validación o cualquier cosa
en realidad, si desea asegurarse de que no haya desbordamientos de búfer, también puede hacerlo.
Esta función cambia la cadena.
Entonces, el encabezado de la función no usa constante
al declarar la cadena de parámetro formal.
Si fueras a mirar la cuerda. h
inside user include en su directorio, verá que no
está definido como una constante.
Copiando cadenas. Copiar cadenas es
modificar una cadena existente, modificar una
matriz de caracteres existente que contiene algunos datos.
O si no tiene nada, quiere poner algo allí.
Como no puede asignar un aumento en c, tampoco puede asignar cadenas. Mencioné esto antes, declarar un
carácter y luego usar el operador de asignación igual no funciona.
Entonces, lo que tiene que hacer es usar la función de copia str
para copiar una cadena en una cadena existente.
Es el equivalente de un operador para cadenas, operador de asignación.
Si declaramos el origen y el destino de dos matrices
de caracteres, todo lo que tenemos que hacer es decir str copy source
y luego, cualquiera que sea el origen, podemos poner la cadena y
lo mismo con el destino.
También puede poner variables allí si desea copiarlas.
Pero lo que estamos haciendo aquí es que el primer parámetro es dónde está copiando.
El segundo parámetro es la cadena que está copiando.
Entonces, la fuente tendría esta fuente dentro de ella después de la copia str.
Destino o destino tendrían este destino dentro de él después
de la llamada de copia str.
La función de copia de str no comprueba si la cadena de origen realmente encaja en la cadena de destino.
Entonces, ¿qué pasaría si tuvieras un hilo grande?
Entonces, en este ejemplo anterior, ¿qué pasaría si un destino tuviera 100 caracteres?
Y en lugar de tener esto como destino, tenía 100 caracteres.
Intentó copiarlo en una fuente que
solo tenía 50 caracteres. Habría un problema.
La cadena de destino sería más grande que la cadena de origen que está copiando.
Entonces, si intentamos copiar str copy en la fuente en lugar de copiar esto como fuente,
colocamos esta fuente cinco veces o diez veces lo que sea y una sobre 50,
habría un error.
Y lo demostraré.
Entonces, una forma más segura de copiar cadenas es usar strn copy. Notará que n se puede convertir
en strn copy.
Strn copy toma un tercer argumento.
El número máximo de caracteres para copiar.
Así que aquí especificas cuánto quieres copiar.
Entonces, si tiene una fuente de 40 y un destino de 12 tamaños, primero puede
hacer un conjunto m que simplemente establece el tamaño de los datos dentro de un destino
en terminadores nulos de esa manera cuando agrega algo, automáticamente estará allí, don No te preocupes por eso.
La copia str va a copiar hola cómo estás en la fuente, y no
va a verificar si cómo estás es más grande que la fuente.
Pero si hace una copia strn y copia en un
destino, copiará la fuente y solo copiará los primeros 10 caracteres.
Entonces ese tercer argumento debería corresponder al tamaño del destino.
Así que vayamos a los bloques de código y veamos la longitud de la cadena y veamos cómo copiar
cadenas para ver exactamente cómo funcionan.
Así que aquí tenemos nuestro main.
Y conseguir la longitud de la cuerda es muy fácil.
Vamos a crear nuestra matriz de caracteres. Sabemos cómo crear un área de personaje. No queremos especificar el tamaño,
pero debemos poner el nombre primero y luego los corchetes.
Y luego podemos inicializarlo con lo que
queramos, digamos entre comillas dobles. Las comillas dobles representan cadenas literales.
Entonces puedo decir que mi nombre es Jason.
El resultado final de esto es que
s será una matriz de 17
caracteres de tamaño.
Todos estos caracteres más el terminador nulo.
El terminador nulo es la barra invertida cero.
No tiene que poner eso allí porque el compilador lo agrega automáticamente.
Así es como podemos inicializar y crear una cadena en una matriz de caracteres.
Luego, para imprimirlo, todo lo que tenemos que hacer es decir printf y decir que la longitud es.
Y luego colocamos el porcentaje s
como especificador de formato para mostrar una cadena.
Y luego todo lo que hacemos es decir el nombre de la cadena.
Y para no confundirnos, digamos mi cadena.
Y no tenemos que usar el ampersand como lo hicimos anteriormente, ejemplos anteriores,
solo podemos decir mi cadena. Si compilamos y ejecutamos esto, es
posible que también tengamos que asegurarnos de incluir el encabezado de la cadena.
Cuando compilemos y ejecutemos esto, verá la longitud de la cadena.
Entonces, la longitud es y no llamé a la función de longitud de cadena.
Por lo tanto, debe llamar a la función si desea mostrar la longitud, por lo
que simplemente haga algo así. Pones la cuerda dentro de la longitud de str.
Ahora, cuando lo ejecute, verá la longitud de la cadena.
Esto no tiene que ser una cadena, sino un real.
Así es como mostraría la cadena. Si quiero mostrar la longitud de la cadena,
hago el porcentaje d en la llamada a la función.
Ahora, cuando lo
ejecuto, notarán que en realidad imprime 16, que es la longitud.
Así que es una función bastante fácil usar str length. Si desea copiar
cadenas, use str compare.
Y desea utilizar strn compare para especificar realmente los bytes.
Entonces, si tenemos mi nombre es Jason,
y luego creamos otra cadena,
en realidad la mantendremos así. Ni siquiera tendremos que
especificar y lo que vamos a
hacer es decir que creemos otra cadena llamada
temp y que será igual a str
y comparar, vamos a pasar lo que queramos copiar a.
Simplemente cree una matriz de caracteres vacía, y la
haremos del tamaño 50.
Y lo que vamos a hacer aquí es decir strn copy.
El primer parámetro es donde queremos copiar, vamos a decir temp.
El segundo parámetro es lo que queremos copiar, que es mi cadena.
Y luego no queremos pasar más de 50 bytes.
Entonces, en realidad podemos decir el tamaño de la temperatura para decir
que no queremos pasar más de 50 bytes. Y probablemente quiera hacer -1 para
el terminador nulo.
De esta manera, ese tercer parámetro es realmente importante porque nunca vamos a tener desbordamientos de búfer.
Siempre debe usar strn copy y no str copy.
Y luego aquí podemos mostrar nuestra cadena para ver si fue copiada.
Podríamos decir temp, cambiarlo a un porcentaje.
Y cuando construimos esto, deberíamos
ver, no la longitud, deberíamos ver que la cadena es algo así
y terminar con un punto y coma.
Ahora deberíamos compilar lo que hacemos.
Así que ahora lo ejecutamos. Deberíamos ver nuestra cadena en la que se copió.
Entonces vemos que mi nombre es Jason y eso
se almacena dentro de temp porque imprimimos temp.
Pero siempre use strn copy. No use str copy, eso
se asegurará de que no tenga desbordamientos de búfer.
Y el tercer parámetro siempre debe
ser el destino, no la
fuente, el destino. No tendría sentido decir que copie toda esta cadena.
Porque si es más pequeño, vas a tener problemas. Así que siempre diga el tamaño de esto.
Y verá que puede usar el
operador sizeof para ver cuántos bytes hay dentro del carácter.
Hablemos de algunas funciones más.
Entonces sabemos cómo obtener la longitud, sabemos cómo copiar cadenas, qué tal concatenar cadenas.
La función str cap toma dos argumentos, dos cadenas como
argumentos y copia la segunda cadena al final de la primera.
La segunda cadena no se
modifica, solo la primera. Devolverá el valor de su primer argumento.
La dirección del primer carácter, la cadena a la que se agrega la segunda cadena.
Así que devuelva algo, que le diga dónde lo agregó realmente si alguna vez tuvo que usarlo.
Así que aquí hay un ejemplo, creamos una cadena de caracteres de
mi cadena y solo contiene mi cadena con un terminador nulo.
Creamos una cadena de caracteres de entrada, que es 80, está vacía.
Decimos que ingrese una cadena para concatenarla. Lo leemos en.
Y luego lo concatenamos.
Imprimimos la cadena original seguida de la cadena concatenada y luego la entrada.
Entonces, después de esto, todo lo que ingresaste se pondría
al final de mi cadena. Entonces, si ingresa Jason, sería mi cadena espacial Jason.
Eso es lo que mi cuerda sería igual.
Porque le haces un truco.
Primero imprimimos la cadena y luego le llamamos str cat.
La entrada en realidad será igual a lo que se ingresó,
mi cadena seguida de lo que se ingresó.
Veremos este ejemplo en un segundo. Ahora, al igual que
str copy, str cat también tiene strn end cat.
Entonces, la versión combinada se convierte en la nueva primera cadena.
Así que, al igual que la concatenación de cadenas con str
cat, hay strn cat.
Str cat tiene el mismo problema con str copy. Puede tener un desbordamiento de búfer. En realidad, no se
asegura de que la segunda cadena quepa en la primera matriz.
Entonces, si no tiene suficiente espacio en esa primera matriz, puede tener problemas de desbordamiento de búfer.
Entonces, ¿qué quieres usar con un gato strn.
El segundo argumento indica el número máximo de caracteres que se pueden agregar.
Entonces, por ejemplo, si haces un strn cat
y dos strings bugs en un complemento, solo agregará los primeros 13 caracteres del complemento a los errores, depende
de lo que ocurra primero. Si el complemento es menor
que 13, solo se agregará hasta que vea el terminador nulo.
Entonces, en este ejemplo, estamos creando dos cadenas.
Esta es la fuente de este destino. Estamos haciendo un gran gato.
Solo estamos copiando 15 caracteres en el
destino al final. Entonces, sea cual sea el tamaño del destino,
será el tamaño del destino más 15 y luego lo imprimiremos.
Así que veamos esto en bloques de código nuevamente.
Así que aquí está nuestro ejemplo y vamos a crear una matriz de dos
cadenas de caracteres, una de tamaño 50 y la otra de 50.
Vamos a hacer dos copias str para configurarlas como datos.
Este es el destino de la fuente. Y luego, en la línea 12, hacemos el strn cat.
Y el destino será con el que concatenamos.
Entonces, la fuente será lo que vamos a concatenar.
Y solo vamos a asignar 15 caracteres.
Entonces, si la fuente fuera mayor a 15,
no los copiaríamos todos.
Entonces, cuando compilemos esto y lo
ejecutemos, verá que ahora dice que este
es el archivo fuente o va a decir que este es el
destino seguido de este es el origen.
Entonces dice que este es el destino, esta es la fuente.
Concatenó eso al final del destino.
Por lo tanto, siempre desea usar strn cat para la concatenación, para no tener desbordamientos de búfer.
Hablemos de str compare, que sigo diciendo accidentalmente en lugar
de str copy, str compare.
Entonces, para comparar cadenas, también tenemos que usar una función.
Si desea comparar una cadena con otra, no
puede usar dobles iguales, eso solo verifica las referencias, tenga
o no la misma dirección. Entonces, lo que necesita usar es str compare.
Esto comparará el contenido de la cadena.
No compara la matriz. Por lo tanto, se puede
utilizar para comparar cadenas almacenadas en matrices de diferentes tamaños.
No compara personajes.
Puede usar argumentos como manzanas y a entre comillas dobles, pero no
puede usar argumentos de carácter como un solo carácter a.
Esta función hace con las cadenas lo que los operadores relacionales hacen con los números.
Entonces, la función de comparación devolverá
un valor que le indicará si la cadena es igual o no, si
es más grande o si es menor que.
Si es igual, devolverá cero.
Si es menor que, devolverá menos de cero, si str uno
es menor que str dos.
Y si str dos es menor que str uno, devolverá mayor que cero.
Entonces, ¿qué significa esto exactamente? Bueno, déjame darte un
ejemplo de cómo funciona esto.
Pongamos esto en los bloques de código y ejecútelo.
Pero aquí estamos haciendo un montón de comparaciones str, y le diremos cuáles son los valores, si son
menores o mayores que porque no está muy claro.
Así que tomemos esto y veámoslo en bloques de código.
Así que aquí está nuestro ejemplo. Y estamos comparando un montón de cadenas y luego solo
mostramos los resultados de la comparación
de cadenas, ya sea cero uno o lo que sea.
Entonces, si compara dos cadenas ay a, deben estar entre comillas dobles.
Y lo que ven aquí, lo que estamos haciendo es imprimir lo que llamamos.
Entonces estamos
delimitando las comillas. Estamos poniendo la barra invertida para que imprimamos un carácter
de cita y no termine la cadena. Pero si comparamos ay a,
esto debería devolver cero. Porque cero significa que las cadenas son iguales.
Si comparamos ayb, str compare debería devolver menos
que.
Porque a es menor que b.
B a debe devolver un valor mayor que cero.
Pero repasemos esto, asegúrese de no cometer ningún error
y lo veremos en el resultado.
Entonces, cuando ejecutamos esto
y esto, lo ayuda a recordar qué números se devolverán.
Entonces, cuando comparas ay a, en realidad obtienes 0.
Si comparas ayb, b es menor que
a, entonces es negativo, algo menor que cero,
podría haber dicho lo contrario, mira,
incluso yo todavía los confundo. Como a es mayor que b, a
es mayor que b, uno negativo.
B es menor que a, por lo que obtienes algo mayor que cero, que es uno.
C es mayor que a, por lo que obtienes uno, justo cuando
b era mayor que a.
Y luego estás comparando mayúsculas y minúsculas.
Cuando comparas mayúsculas y minúsculas, hace lo contrario. En realidad, Z es
menor que a minúscula.
Entonces, el capital siempre es menor que minúsculas.
Si intenta comparar manzanas y manzanas, será 1 porque la manzana es
menor que las manzanas.
Y así es como funcionan las comparaciones. Es importante entender que 0 es mayor que
1 o menor que 1. Una vez más, menos
de cero va a decir que la primera cadena es menor que
la segunda cadena.
Y mayor que cero va a decir que la primera cadena es mayor que la segunda cadena.
Esta función es muy fácil de usar. No tiene que preocuparse por ningún
tipo de comparación de cadenas porque no importa el tamaño de las matrices
que está comparando.
La función de comparación de cadenas compara cadenas hasta que encuentra los caracteres correspondientes que difieren.
Así que podría llegar hasta el final de una de las cadenas.
La función de comparación de cadenas compara las cadenas hasta que difieren o hasta que
ha comparado una cantidad de caracteres especificada por el tercer argumento.
Entonces, en este caso, no necesita usar strn compare
para desbordamientos de búfer. Existe, pero solo lo usaría
si solo desea comparar un cierto número de caracteres.
Se usa de manera diferente
que la copia str o la copia strn o la strn cat.
La comparación de strn solo dice que solo quiero mostrar tantos caracteres.
Por lo tanto, sería útil si solo busca un prefijo.
Entonces, si desea buscar cadenas que comiencen con astro, puede
limitar la búsqueda a los primeros cinco caracteres y
usar strn compare de esta manera.
En este ejemplo, ves que decimos que es igual a cero.
A menudo ves una declaración if como esta cuando estás usando str compare.
Verá str compare dentro de esta declaración y es igual a cero para decir que es igual.
Así que strn compare usa los primeros cinco caracteres, compara
astro con los primeros cinco caracteres de la astronomía.
Dirá que lo encontró. Va a ser igual a cero, y dirá astronomía encontrada.
Si haces lo mismo, pero comparándolo con una cadena diferente llamada
asombroso, no lo encontrará, en realidad se mostrará, dirá que
asombroso es más grande que astro. Entonces mostrará algo mayor que
0, que es un 1 y no
mostrará ningún dato.
Por lo tanto, use str compare cuando compare cadenas para todos los contenidos.
Utilice strn compare cuando solo desee comparar el prefijo con una cadena.
El mismo tipo de sintaxis o strn compara solo ese tercer argumento.
Así que hablamos mucho sobre algunas
funciones realmente importantes que vamos a usar,
principalmente str length, strn copy, strn cat y strn compare.
Tendremos un desafío en el que tendrás que utilizar estas funciones que te
familiarizarán con ellas.
Pero te familiarizarás mucho con esto porque terminarás usándolos
una y otra y otra vez. Gracias.