Ciao e Benvenuto. In questa conferenza, fornirò una
dimostrazione di una soluzione per la nostra sfida precedente.
Spiegherò come invertire i caratteri
in una stringa usando la funzione str
length e anche come ordinare le stringhe usando
str compare e anche str copy, nonché
usando l'algoritmo a bolle.
Visualizziamo i blocchi di codice.
E creerò solo un singolo programma che penso per questo. Ho menzionato nella
sfida che crei due programmi.
Ma per semplicità e per dimostrazione, ne creerò uno solo.
Crea un
progetto, lo chiamerò semplicemente
funzioni stringa o qualche variazione di questo.
Chiamiamolo esempio di funzioni stringa
comuni.
Quindi iniziamo con il contrario. Il contrario può andare su una sua funzione
o possiamo semplicemente metterlo nella principale. Stavo per metterlo nel principale.
Quindi la prima cosa che voglio fare è creare un - beh, la prima cosa che voglio
fare in realtà è che voglio includere il file di intestazione corretto in modo da poter usare queste funzioni
di stringa, che è la mia stringa di inclusione. h.
Qui è dove contiene tutte le belle funzioni per le stringhe.
Ora creerò un array di caratteri. Lo farò diventare una taglia 100.
È solo arbitrario, semplicemente
non sarà in grado di memorizzare cose maggiori di 100.
Creerò un paio di variabili locali che mi
aiuteranno con la mia analisi. E quello che voglio fare
è mostrare prima un output all'utente.
Quindi dirò solo un paio di
avanzamenti riga, stampa
singoli caratteri individuali di stringa e ordine inverso.
Questo dirà all'utente cosa sta succedendo e poi lo stamperà solo
per renderlo più evidente, basta stampare
qualcosa del genere, così è più facile da leggere.
Dirò di inserire la stringa. Leggerò nella stringa.
E poi memorizzerò la stringa.
Quindi dirò
scanf, present s e dirò str.
E non devo passare la e commerciale per leggerlo.
Quindi prenderò la lunghezza della stringa. Lo inserirò nella mia variabile locale l.
Quindi posso chiamare str link semplicemente dicendo str length passando la stringa,
e restituisce quanti caratteri in quella stringa. Molto, molto facile.
E poi stamperò qualcosa per dire loro che i personaggi sono in ordine inverso.
Quindi i caratteri della stringa in
reverse r backslash n.
Quindi scriverò un bel ciclo for che passa attraverso
il mio array e in base alla lunghezza e lo inverte.
Quindi dirò che io è uguale a l.
Quindi tornerò indietro nell'attuale array
di stringhe. Inizierò dalla fine e andrò avanti.
E diciamo che è maggiore o uguale a
0 e io meno meno. E noti che non devo guardare nessun
carattere di terminazione nullo quando lo faccio in questo modo.
Poi stamperò ogni personaggio man mano che lo incontro.
Per stampare un carattere e vederti basta fare la percentuale c.
E fallo e dì str sub-I.
E questo è fondamentalmente tutto.
E poi stamperò una nuova riga.
E in realtà stamperò un sacco di cose solo per terminarlo, un
mucchio di trattini.
Vediamo se funziona, molto facile questo in realtà come dovrebbe
essere, ottenere la lunghezza non dovrebbe essere difficile.
E ho dimenticato un avanzamento riga, quindi sistemiamolo.
Quindi qui dice stampare i singoli caratteri della stringa al contrario o inserire la stringa.
Ora scanf, leggerà solo. Quindi se entro in Jason spazio Feden.
Scanf leggerà solo Jason e lo spazio.
Vorresti usare un'altra funzione come f get s se volessi leggere l'intera cosa.
Quindi quello che farà è invertire la stampa di Jason
nosaj, cosa che fa. I caratteri della stringa inversa sono nosaj.
È piuttosto semplice, non è una funzione o implementazione
molto complicata.
Ora proviamolo con l'ordinamento di una stringa.
E così ora farò qualcosa. E lo farò principalmente per ora, immagino.
Dovrei inserirli nelle funzioni effettive, ma non stiamo dimostrando le
funzioni in questa lezione, stiamo dimostrando le stringhe.
Quindi creiamo un altro paio di variabili locali di cui avremo bisogno.
Principalmente, creeremo un nome.
E in questo caso, stavo
per creare un array di stringhe. Creeremo un array di stringhe e useremo f get s.
Creerò un array di stringhe. Quindi questo sembra un
array bidimensionale.
Quindi quello che stiamo facendo qui è creare 25 stringhe di dimensione 50.
Poi ne creerò anche un altro di appena 25, questo
conterrà ogni stringa.
E poi aggiungerò altre
due variabili. Aggiungerò una ne una j.
E così, dopo aver fatto il nostro inverso, stamperò.
Un altro messaggio per
dire cosa stiamo facendo ordina
le stringhe di un array usando il bubble sort.
Non ti spiegherò il Bubble Sort. Perché ancora una volta, questo è solo un algoritmo che non
è rilevante per ciò che stiamo facendo. In realtà, è solo un modo per ordinare.
In realtà è uno dei tipi più semplici perché essenzialmente scambi.
Ma quello che vogliamo fare è prima di tutto ottenere quante stringhe entreranno. Quindi diremo printf
input number
of strings, e poi diremo scanf.
Scanf può essere utilizzato qui perché è solo un numero.
Diremo percento d e lo memorizzeremo nella nostra variabile locale n.
Di nuovo, so che non sto usando nomi
fantastici qui, ma sto dimostrando qualcosa. Dato che è un è, dobbiamo passare nella e commerciale.
Poi chiederò loro di inserire le corde.
Quindi qui dirò
la stringa di input
1 2 o 3 seguita da un avanzamento riga.
Questo sarà solo il numero che devono inserire.
Stringa uno, stringa due o stringa tre.
Quindi avrò effettivamente un ciclo che passa e riceve l'input.
Quindi qui dirò che io è uguale a
0, io è minore di uguale an per quante stringhe vogliono
inserire e io più più o più più I.
Qui leggerò effettivamente la stringa e userò un modo diverso di leggere: stavo pensando
di usare f get s, in modo da poter
inserire una stringa che aveva spazi. Ma non credo che ne avessimo bisogno.
Analizziamo f e
leggiamo in scanf nel nostro array dei
nomi.
Ricorda, abbiamo un nome e questa è una stringa di stringhe
essenzialmente di 25 caratteri.
I 50 caratteri 25 parole.
Quindi il numero massimo di parole che puoi inserire è 25.
Quindi lo memorizzeremo nel nostro
array di nomi. Quindi diremo solo scanf.
Leggeremo una stringa e la inseriremo nel nome
sub I.
Quindi abbiamo archiviato i nostri array, possiamo memorizzarne solo fino a 25.
Ora abbiamo finito con il nostro ciclo e ora possiamo semplicemente scrivere il nostro bubble sort.
E quindi il nostro bubble sort, non te lo spiegherò, ti dirò solo che è
un algoritmo piuttosto semplice che ha un loop interno.
Quindi hai un ciclo for che attraversa, I è uguale a 1 attraverso
tutte le stringhe.
E poi nel tuo ciclo interno, vai da zero a tutte
le stringhe meno una. E confronti quella prima stringa con tutte le altre stringhe.
E essenzialmente li bolle. Ma ciò che è
importante qui è la funzione di confronto str.
Vorrei solo provare a ottenere correttamente questo rientro
nelle funzioni di copia str, questo è davvero ciò che è importante.
Noterai che non ho parentesi finali per nessuno dei quattro perché
hanno istruzioni singole.
Anche se questo if ha qualcosa nel suo corpo if, questa è solo un'affermazione.
Quindi andremo dal confrontare ogni parola con ogni altra parola essenzialmente
dopo averne confrontata una in precedenza.
Quindi diciamo se str confronta nome sub j e nome
sub j sub uno, quindi str compare
accetta due argomenti, due matrici di
caratteri, puntatori a caratteri
in realtà.
E se sono uguali, restituirà zero.
Se il primo parametro è
minore del secondo parametro, restituirà
minore di zero.
E se il primo parametro è maggiore del
secondo, restituirà maggiore di zero, uno.
Quindi ciò che questo sta dicendo è che se la prima stringa è maggiore della seconda
stringa, allora vogliamo scambiare tutto. Ed è per questo che abbiamo quella temperatura.
Temp sta effettivamente memorizzando una stringa temporanea temporanea.
Quindi inseriamo il nome temporaneo sub j e poi
scambiamo il nome sub j con i nomi di j più uno.
È così che funziona il Bubble Sort. Ancora una volta, ciò che è importante qui è str compare e str copy.
E se sei al sicuro, dovresti usare strn compare.
E quando fai il confronto. Bene, in realtà strn compare,
non ti interessa perché è solo se vuoi confrontare il prefisso.
Per la copia str, in realtà vuoi usare la copia strn.
E quel terzo parametro è ciò che è importante.
Quindi strn copy, vuoi solo assicurarti di non copiare più
della dimensione di temp, meno uno perché altrimenti hai un buffer overflow.
Quindi vorresti tutto questo, potresti anche usare - se
non fosse un buffer di caratteri, probabilmente vorrai usare str
length se fosse un puntatore. Ma la dimensione di funzionerà bene per questo.
E ancora, questo eliminerà qualsiasi sovraccarico del buffer.
Quindi è sempre più sicuro usare strn copy e
one perché abbiamo il nostro terminatore null che deve andare alla fine.
Quindi qui è solo la destinazione di origine per la copia strn.
Stiamo copiando il nome sub j in temp e lo stesso con i nomi di j
più uno e il nome sub j. E poi, infine, temp in nomi sub
j più uno. E in realtà
devo aggiornare queste variabili perché sono sbagliate
perché devono sempre essere la fonte. Quindi nomina qui il nome sub j.
E poi l'ultimo sarebbe il
nome di j più uno, j più uno.
Quindi questo è strn copy e str compare, funzioni molto facili da usare.
Dopo averli ordinati, vogliamo solo stamparli.
Quindi vogliamo dire che le stringhe vengono visualizzate dopo
l'ordinamento, metterle in
line feed e quindi eseguire un
ciclo per
stampare tutte le stringhe nel nostro array.
Quindi diciamo 4 I è uguale a 0.
I è minore o uguale a n perché n rappresenta
il numero di stringhe che abbiamo ordinato e inserito.
Quindi vogliamo solo passare attraverso la nostra stringa di array di stringhe.
Quindi vogliamo dire avanzamento riga di
printf e nome sub I.
Quindi nome sub I è in realtà il nostro array ordinato, ecco perché avevamo
nomi nome sub I.
Anche se non abbiamo il secondo perché rappresenta la dimensione di ogni personaggio.
25 parole di 50 max.
Quindi vediamo se funziona.
Costruiscilo, ho ricevuto un paio di messaggi perché non so come si scrive.
E se eseguiamo questo. Per prima cosa eseguiremo la nostra funzione inversa in modo
che tu possa vederla di nuovo perché l'abbiamo inclusa nello stesso programma.
Dì Fedin e idf va bene.
Immettere il numero di stringhe che si desidera ordinare. Diciamo cinque, diciamo
zzzz solo così è chiaro, qualcosa del
genere.
Ho incasinato un po 'lì, ma sembra che sia risolto, a b d f r z.
Quindi funziona. Ho un bug
però perché la stringa di input percent d.
Inserisco il numero di stringhe in n e poi dico minore
di uguale, dovrei solo dire minore di.
Quindi eseguiamolo di nuovo solo per dimostrarlo, ma devo costruirlo.
Non dimenticare di costruire dopo aver cambiato le cose.
Ancora una volta, diremo qualcosa qui e poi le
stringhe di numeri. Facciamone
solo quattro.
Quindi li alfabetizzano e dicono d e l z, quindi sembra buono.
Quindi puoi sicuramente migliorare questo codice in cui potresti voler mettere
tutto in funzioni, renderlo più modulare. Ma quello che sto cercando di ottenere
con questo compito è come usi str compare, come usi strn copy e
come puoi usare str length.
Dovresti anche giocare con str cat, strn
cat e questa è l'altra vera funzione comune.
Potresti voler giocare con strstr, strchar per la ricerca. Quelle sono davvero, davvero
buone o le funzioni è, superiore è, inferiore per controllare i caratteri
o le funzioni di conversione atoi nad atof.
Grazie. Spero che questo sia stato utile.