Hola y bienvenido. En esta conferencia, ofreceré una
demostración de una solución para nuestro desafío anterior.
Voy a ver cómo podemos revertir
los caracteres en una cadena usando la función str
length y también pasar por la clasificación de cadenas usando
str compare y también str copy, así como usando
el algoritmo de burbuja.
Vamos a traer bloques de código.
Y creo que voy a crear un solo programa para esto. Mencioné en el
desafío que creas dos programas.
Pero para simplificar y demostrar, solo voy a crear uno solo.
Crea un
proyecto, solo voy a nombrarlo
funciones de cadena o alguna variación de eso.
Llamémoslo ejemplo de funciones de cadena
comunes.
Empecemos por lo contrario. Lo contrario puede tener su propia función o
simplemente podemos ponerlo en la principal. Iba a ponerlo en el principal.
Entonces, lo primero que quiero hacer es crear un - bueno, lo primero que
quiero hacer es incluir el archivo de encabezado correcto para poder usar estas funciones de
cadena, que es mi cadena de inclusión. h.
Aquí es donde contiene todas las funciones de cadena agradables.
Ahora voy a crear una matriz de caracteres. Voy a hacerla talla 100.
Es simplemente arbitrario,
simplemente no podrá almacenar cosas mayores a 100.
Voy a crear un par de variables locales que
me ayudarán con mi análisis. Y lo que quiero hacer
es mostrar algunos resultados primero al usuario.
Así que solo voy a decir
un par de líneas,
imprimir caracteres individuales, individuales de cadena y orden inverso.
Eso le dirá al usuario lo que está sucediendo y luego también imprimirá
solo para que sea más evidente, simplemente
imprima algo así, para que sea más fácil de leer.
Voy a decir que ingrese la cadena. Voy a leer en la cadena.
Y luego voy a guardar la cuerda.
Así que voy
a decir scanf, present s y voy a decir str.
Y no tengo que pasar el ampersand para leerlo.
Luego voy a obtener la longitud de la cuerda. Voy a poner eso en mi variable local l.
Entonces puedo llamar str link simplemente diciendo str length pasando en la cadena,
y devuelve cuántos caracteres hay en esa cadena. Muy, muy facil.
Y luego voy a imprimir algo para decirles que los personajes están en orden inverso.
Entonces, los caracteres de la cadena en
reversa r barra invertida n.
Luego voy a escribir un pequeño bucle for que pase por
mi matriz y de acuerdo con la longitud y simplemente lo invierta.
Así que voy a decir que yo es igual a l.
Así que voy a retroceder en la matriz
de cadenas real. Voy a empezar por el final y seguir adelante.
Y digamos que yo es mayor o igual
que 0 y yo menos menos. Y notará que no tengo que mirar ningún
carácter de terminación nula cuando lo hago de esta manera.
Luego, voy a imprimir cada personaje a medida que lo encuentro.
Para imprimir un carácter y ver que solo hace el porcentaje c.
Y solo haz eso y di str sub-I.
Y eso es básicamente todo.
Y luego imprimiré una nueva línea.
Y, de hecho, imprimiré un montón de cosas para terminar, un
montón de guiones.
Veamos si funciona, muy fácil, como debería ser, conseguir
la longitud no debería ser difícil.
Y olvidé un avance de línea, así que arreglemos eso.
Entonces aquí dice imprimir caracteres individuales de la cadena al revés o ingresar la cadena.
Ahora scanf, solo se leerá. Así que si entro Jason en el espacio de Feden.
Scanf solo le leerá a Jason y al espacio.
Querría usar otra función como f get s si quisiera leer todo.
Entonces, lo que esto va a hacer es revertir la impresión de
Jason nosaj, lo cual hace. Los caracteres de la cadena inversa son nosaj.
Eso es bastante simple, no es una función o
implementación muy complicada.
Ahora intentémoslo ordenando una cadena.
Y ahora voy a hacer algo. Y lo haré en general, supongo que solo por ahora.
Debería ponerlos en funciones reales, pero no estamos demostrando
funciones en esta lección, estamos demostrando cadenas.
Así que creemos un par de variables locales más que vamos a necesitar.
Básicamente, vamos a crear un nombre.
Y en este caso, iba
a crear una matriz de cadenas. Crearemos una matriz de cadenas y usaremos f get s.
Voy a crear una matriz de cadenas. Entonces esto parece una
matriz bidimensional.
Entonces, lo que estamos haciendo aquí es crear 25 cadenas de tamaño 50.
Luego también voy a crear otro de solo 25, esto
contendrá cada cadena.
Y luego agregaré dos
variables más. Voy a agregar una n y una j.
Entonces, después de hacer nuestro revés, voy a imprimir.
Otro mensaje para decir
lo que estamos haciendo ordena las
cadenas de una matriz utilizando la clasificación de burbujas.
No te voy a explicar el tipo de burbuja. Porque nuevamente, eso es solo un algoritmo que no es
relevante para lo que estamos haciendo. Realmente, es solo una forma de ordenar.
En realidad, es uno de los tipos más fáciles porque simplemente intercambia esencialmente.
Pero lo que queremos hacer es primero saber cuántas cadenas van a ingresar. Entonces vamos a decir printf
ingresa el número
de cadenas, y luego vamos a decir scanf.
Scanf se puede utilizar aquí porque es solo un número.
Vamos a decir porcentaje d, y lo almacenaremos en nuestra variable local n.
Nuevamente, sé que no estoy usando nombres
geniales aquí, pero estoy demostrando algo. Como es un es, tenemos que pasar el ampersand.
Luego les voy a pedir que ingresen las cadenas.
Así que aquí voy
a decir la cadena de
entrada 1 2 o 3 seguida de un avance de línea.
Este será el número que deben ingresar.
Cuerda uno, cuerda dos o cuerda tres.
Entonces tendré un bucle que atraviese y obtenga la entrada.
Entonces aquí diré que I es igual a 0,
I es menor que igual an para la cantidad de cadenas que
quieren ingresar y I más más o más más I.
Aquí voy a leer la cadena, y voy a usar una forma diferente de
leer: estaba pensando en usar f get s, para que
pudieras ingresar una cadena que tuviera espacios. Pero no creo que lo necesitemos.
Escaneamos f, y
vamos a leer en scanf en nuestra matriz de
nombres.
Recuerde, tenemos nombre y esta es una cadena de cadenas esencialmente
de 25 caracteres.
Los 50 caracteres 25 palabras.
Entonces, el número máximo de palabras que puede ingresar es 25.
Así que vamos a almacenar esto
en nuestra matriz de nombres. Así que solo diremos scanf.
Vamos a leer en una cadena, y lo vamos a poner en
el nombre sub I.
Y así almacenamos nuestras matrices, solo podemos almacenar hasta 25.
Ahora hemos terminado con nuestro bucle y ahora podemos escribir nuestro tipo de burbuja.
Y entonces nuestro tipo de burbuja, no te lo voy a explicar, solo te voy a decir que
es un algoritmo bastante simple que tiene un ciclo interno.
Entonces tienes un bucle for que pasa, I es igual a 1 en
todas las cadenas.
Y luego, en tu bucle interno, vas de cero a todas
las cadenas menos una. Y compara esa primera cadena con todas las demás cadenas.
Y esencialmente los burbujea. Pero lo importante
aquí es la función de comparación str.
Permítanme intentar obtener esta sangría correctamente en
las funciones de copia str, esto es realmente lo importante.
Notarás que no tengo corchetes finales para ninguno de los cuatro porque
tienen declaraciones únicas.
Aunque this if tiene algo en su cuerpo if, esta es solo una declaración.
Así que vamos a comparar cada palabra con cualquier otra palabra
esencialmente después de haber comparado una anteriormente.
Entonces decimos si str compare name sub j y name
sub j sub one, entonces str compare
toma dos argumentos, dos matrices de
caracteres, punteros de caracteres
en realidad.
Y si son iguales, devolverá cero.
Si el primer parámetro es menor
que el segundo parámetro, devolverá
menos de cero.
Y si el primer parámetro es mayor que el
segundo parámetro, devolverá mayor que cero, uno.
Entonces, lo que esto dice es que si la primera cadena es mayor que la
segunda, entonces queremos intercambiar todo. Y es por eso que tenemos esa temperatura.
Temp en realidad está almacenando una cadena temporal temporal.
Así que ponemos el nombre temporal sub j y
luego intercambiamos el nombre sub j con los nombres de j más uno.
Así es como funciona el tipo de burbuja. Nuevamente, lo importante aquí es str compare y str copy.
Y si estás seguro, querrás usar strn compare.
Y cuando lo hagas comparar. Bueno, en realidad strn compare,
no le importa porque eso es solo si desea comparar el prefijo.
Para str copy, realmente desea usar strn copy.
Y ese tercer parámetro es lo importante.
Así que strn copy, solo desea asegurarse de no copiar en más
del tamaño de temp, menos uno porque de lo contrario tiene un desbordamiento de búfer.
Entonces, usaría todos estos, también podría usar: si no
fuera un búfer de caracteres, probablemente desee usar str length
si fuera un puntero. Pero el tamaño de funcionará bien para esto.
Y nuevamente, esto eliminará cualquier desbordamiento del búfer.
Por lo tanto, siempre es más seguro usar strn
copy y one porque tenemos nuestro terminador nulo que debe ir al final.
Así que aquí es solo el destino de origen para strn copy.
Estamos copiando el nombre sub j en temp y lo mismo con los nombres de j
más uno y el nombre sub j. Y luego, por último, temp en nombres sub
j más uno. Y de hecho
tengo que actualizar estas variables porque están mal
porque siempre tienen que ser la fuente. Así que nombre aquí nombre sub j.
Y luego el último sería los
nombres de j más uno, j más uno.
Así que eso es strn copy y str compare, funciones muy fáciles de usar.
Después de ordenarlos, solo queremos imprimirlos.
Así que queremos decir que las cadenas aparecen después
de ordenar, ponerlas
en línea y luego pasar por
un bucle
para imprimir todas las cadenas de nuestra matriz.
Entonces decimos 4 I es igual a 0.
I es menor o igual que n porque
n representa cuántas cadenas clasificamos e ingresamos.
Entonces solo queremos pasar por nuestra cadena de matrices de cadenas.
Así que queremos decir el avance de línea de
printf s y el nombre sub I.
Así que name sub I es en realidad nuestra matriz ordenada, es por eso que
teníamos nombres name sub I.
Aunque no tenemos el segundo porque representa el tamaño de cada carácter.
25 palabras de 50 máx.
Veamos si esto funciona.
Constrúyelo, recibí un par de mensajes porque no sé cómo se escribe.
Y si ejecutamos esto. Primero vamos a ejecutar nuestra función inversa para que
pueda ver eso nuevamente porque la incluimos en el mismo programa.
Di Fedin e idf, eso es bueno.
Ingrese el número de cadenas que queremos ordenar. Digamos cinco, digamos
zzzz para que quede claro, algo
así.
Me equivoqué un poco allí, pero parece que lo solucionó, a b d f r z.
Entonces funciona. Sin embargo, tengo un
error porque la cadena de entrada porcentaje d.
Introduzco el número de cadenas en ny luego digo menos
que igual, debería decir menos que.
Así que vamos a ejecutarlo de nuevo solo para demostrarlo, pero tengo que construirlo.
No olvide construir después de haber cambiado las cosas.
Nuevamente, diremos cualquier cosa aquí y luego numeraremos
las cadenas. Hagamos
solo cuatro.
Entonces los ordenan alfabéticamente y dicen d e l z, así que se ve bien.
Así que definitivamente puedes mejorar este código donde podrías querer poner
todo en funciones, hacerlo más modular. Pero lo que estoy tratando de hacer
con esta tarea es cómo usas str compare, cómo usas strn copy y
cómo puedes usar str length.
También deberías jugar con str cat, strn
cat y esa es la otra función común real.
Es posible que desee jugar con strstr, strchar para buscar. Esos son realmente,
muy buenos o es, superior es, inferior para verificar
caracteres, o las funciones adicionales de conversión.
Gracias. Espero que esto haya sido de ayuda.