Ciao e bentornato. In questa lezione, voglio iniziare a parlare delle funzioni delle stringhe.
Ho accennato in precedenza che
le stringhe, le matrici di caratteri non sono
un tipo di dati variabile in c.
Quindi puoi usare uno qualsiasi degli operatori,
ma dovrai comunque essere in grado di fare molte cose sulle stringhe.
Sarai in grado di manipolarli.
Avrai voglia di ottenere la lunghezza. Vuoi confrontarli, probabilmente
tutti i tipi di cose li convertono.
Quindi fortunatamente la libreria standard viene fornita con un sacco di funzioni
che puoi usare per eseguire questo tipo di operazioni.
Inizierò prima a parlare di alcuni dei più comuni e
poi passeremo ad altri più specifici in altre lezioni.
Quindi sappiamo già che una stringa di
caratteri è un array di caratteri terminato da un carattere nullo.
Le stringhe di caratteri sono comunemente usate nei programmi c.
C fortunatamente fornisce molte funzioni progettate specificamente per lavorare con le stringhe.
Quelli di cui parleremo sono i più comuni che utilizzerai.
Innanzitutto, ottenere la lunghezza di una stringa utilizzando la funzione str length.
Copia di una stringa di caratteri in un'altra.
Ricorda, ti ho detto prima che non puoi usare l'operatore di assegnazione per assegnare una stringa.
Quindi quello che fai è usare str copy o strn copy.
Inoltre, combinando due stringhe di caratteri insieme, concatenazione.
C'è un gatto str e un gatto strn.
E determinare se due stringhe di caratteri sono uguali.
Anche in questo caso, l'operatore uguale a uguale non funzionerà per confrontare le
stringhe perché sono array.
Quindi, se vuoi confrontare le stringhe, devi usare funzioni speciali
fornite dalla libreria c. Str confronta e strn confronta.
Innanzitutto, parliamo della lunghezza.
Tutte queste funzioni sono definite nella stringa. file di intestazione, quindi devi
includerlo quando chiami o richiami una di queste funzioni.
Ottenere la lunghezza di una stringa.
Str length è una funzione che trova la lunghezza della stringa, è piuttosto semplice.
Viene restituito come una variabile di dimensione t.
Puoi praticamente usare la variabile size t in modo intercambiabile con un int.
Ma prima, dovrai includere quel file di intestazione della stringa se vuoi usare str length ed
è così che lo usi.
Fondamentalmente crei una stringa letterale tra virgolette doppie e la assegni a un array di caratteri.
Non si specifica la dimensione della matrice di caratteri.
Il compilatore lo farà per te e aggiungerà il terminatore nullo.
Una volta che hai definito la mia stringa
con una costante di stringa, puoi quindi chiamare str length e passare quel
carattere, molto carino.
È uno dei più usati perché spesso si desidera ottenere questa lunghezza di una stringa quando
si eseguono controlli di convalida o qualsiasi altra cosa, se
si vuole essere sicuri che non ci siano buffer overflow, è possibile farlo anche.
Questa funzione cambia la stringa.
Quindi l'intestazione della funzione non utilizza la costante nella
dichiarazione della stringa del parametro formale.
Se dovessi andare a vedere lo spago. h all'interno
di user include nella tua directory, vedresti che non
è definito come una costante.
Copia di stringhe. La copia di stringhe
sta modificando una stringa esistente, modificando una
matrice di caratteri esistente che contiene alcuni dati.
O se non contiene niente, vuoi mettere qualcosa lì dentro.
Dato che non puoi assegnare un aumento in c, non puoi nemmeno assegnare stringhe. Ne ho parlato in precedenza,
dichiarare un carattere e quindi utilizzare l'operatore di assegnazione uguale non funziona.
Quindi quello che devi fare è usare la funzione di copia str
per copiare una stringa in una stringa esistente.
È l'equivalente di un operatore per stringhe, operatore di assegnazione.
Se dichiariamo due matrici di caratteri sorgente e destinazione, tutto
ciò che dobbiamo fare è dire str copy source e quindi
qualunque sia la sorgente possiamo inserire la stringa e lo
stesso con la destinazione.
Puoi anche inserire delle variabili lì se vuoi copiarle.
Ma quello che stiamo facendo qui è che il primo parametro è dove stai copiando.
Il secondo parametro è la stringa che stai copiando.
Quindi la fonte dovrebbe avere questa è la fonte al suo interno dopo la copia di str.
Destination o dest avrebbe questa è la destinazione al suo interno
dopo la chiamata di copia str.
La funzione di copia str non verifica se la stringa di origine si adatta effettivamente alla stringa di destinazione.
Quindi cosa succederebbe se avessi una grande stringa.
Quindi, in questo esempio precedente, cosa accadrebbe se una destinazione contenesse 100 caratteri.
E invece di avere questo come destinazione, aveva 100 caratteri.
Hai provato a copiarlo in una sorgente
che conteneva solo 50 caratteri. Ci sarebbe un problema.
La stringa di destinazione sarebbe più grande della stringa di origine che stai copiando.
Quindi, se provassimo a copiare la copia di str nel sorgente invece di copiarlo come sorgente che abbiamo
inserito, questo viene originato cinque volte o dieci volte qualunque cosa sia e uno su 50,
ci sarebbe un errore.
E lo dimostrerò.
Quindi un modo più sicuro per copiare le stringhe è usare strn copy. Noterai che n può essere trasformato
in strn copy.
Strn copy accetta un terzo argomento.
Il numero massimo di caratteri da copiare.
Quindi qui specifichi effettivamente quanto vuoi copiare.
Quindi, se hai una sorgente di 40 e una destinazione di 12 dimensioni, puoi prima
fare un set m che sta semplicemente impostando la dimensione dei dati all'interno di una destinazione
su terminatori nulli in questo modo quando aggiungi qualcosa sarà automaticamente lì, don Non preoccuparti di questo.
La copia str copierà ciao come stai alla fonte, e non controllerà
se come stai andando è più grande della fonte.
Ma se fai una copia strn e copi in
una destinazione, copierà l'origine e copierà solo i primi 10 caratteri.
Quindi quel terzo argomento dovrebbe corrispondere alla dimensione della destinazione.
Quindi andiamo nei blocchi di codice e guardiamo la lunghezza delle string e guardiamo la copia delle
stringhe per vedere esattamente come funzionano.
Quindi qui, abbiamo il nostro principale.
E per ottenere la stringa della lunghezza della stringa è davvero facile.
Creeremo il nostro array di personaggi. Sappiamo come creare un'area personaggio. Non vogliamo specificare la dimensione,
ma dobbiamo mettere prima il nome e poi le parentesi.
E poi possiamo inizializzarlo con quello che
vogliamo, diciamo tra virgolette doppie. Le virgolette doppie rappresentano stringhe letterali.
Quindi posso solo dire che il mio nome è Jason.
Il risultato finale è che
s sarà un array di
17 caratteri.
Tutti questi caratteri più il terminatore nullo.
Il terminatore nullo è la barra rovesciata zero.
Non devi metterlo lì perché viene aggiunto automaticamente dal compilatore.
È così che possiamo inizializzare e creare una stringa in un array di caratteri.
Quindi per stamparlo, tutto ciò che dobbiamo fare è dire printf e dire che la lunghezza è.
Quindi inseriamo la percentuale s come
specificatore di formato per visualizzare una stringa.
E poi tutto quello che facciamo è pronunciare il nome della stringa.
E per non confonderci diciamo solo la mia stringa.
E non dobbiamo usare la e commerciale come abbiamo fatto in precedenza, esempi precedenti,
possiamo solo dire la mia stringa. Se lo compiliamo ed eseguiamo
questo, potremmo anche dover assicurarci di includere l'intestazione della stringa.
Quando lo compiliamo ed eseguiamo, vedrai la lunghezza della stringa.
Quindi la lunghezza è e non ho chiamato la funzione di lunghezza della stringa.
Quindi devi effettivamente chiamare la funzione se vuoi visualizzare la lunghezza, quindi devi solo
fare qualcosa del genere. Metti la stringa all'interno di str length.
Ora, quando lo esegui, vedresti effettivamente la lunghezza della stringa.
Non deve essere una stringa, ma un vero e proprio.
Quindi è così che visualizzerei la stringa. Se voglio visualizzare la lunghezza della
stringa, eseguo la percentuale d nella chiamata alla funzione.
Ora, quando lo
eseguo, noterai che in realtà stampa 16, che è la lunghezza.
Quindi è una funzione abbastanza facile usare str length. Se vuoi copiare
stringhe, usa str compare.
E vuoi usare strn compare per specificare effettivamente i byte.
Quindi qui se abbiamo il mio nome è
Jason, e quindi creiamo un'altra stringa,
in realtà la manterremo semplicemente così. Non dovremo nemmeno
specificare e quello che faremo
è dire di creare un'altra stringa chiamata
temp e sarà uguale a str
e confrontare, passeremo ciò che vogliamo copia a.
Basta creare un array di caratteri vuoto e lo trasformeremo
in una dimensione 50.
E quello che faremo qui è che diremo strn copy.
Il primo parametro è dove vogliamo copiare do, diremo temp.
Il secondo parametro è ciò che vogliamo copiare che è la mia stringa.
E poi non vogliamo passare più di 50 byte.
Quindi possiamo effettivamente dire size of temp per dire che
non vogliamo passare più di 50 byte. E probabilmente vorrai fare -1 per
il terminatore nullo.
In questo modo, quel terzo parametro è davvero importante perché non avremo mai buffer overflow.
Dovresti sempre usare strn copy e non str copy.
E poi qui possiamo semplicemente visualizzare la nostra stringa per vedere se è stata copiata.
Potremmo dire temp, cambiarlo in una percentuale s.
E quando lo costruiamo, dovremmo
vedere, non la lunghezza, dovremmo vedere che la stringa è qualcosa del
genere e terminarla con un punto e virgola.
Ora dovremmo compilare quello che facciamo.
Quindi ora lo eseguiamo. Dovremmo solo vedere la nostra stringa che è stata copiata.
Quindi vediamo che il mio nome è Jason e che
è memorizzato all'interno di temp perché abbiamo stampato temp.
Ma usa sempre la copia strn. Non usare str copy,
questo assicurerà di non avere buffer overflow.
E il terzo parametro dovrebbe sempre
essere la destinazione, non l'origine,
la destinazione. Sarebbe inutile dire copiare l'intera stringa.
Perché se è più piccolo, avrai problemi. Quindi dì sempre la dimensione di questo.
E vedi che puoi usare l'operatore
sizeof per vedere quanti byte ci sono all'interno del carattere.
Parliamo di altre funzioni.
Quindi sappiamo come ottenere la lunghezza, sappiamo come copiare le stringhe, che ne dici di concatenare le stringhe.
La funzione str cap accetta due argomenti, due stringhe
come argomenti e copia la seconda stringa alla fine della prima.
La seconda stringa non viene
modificata, solo la prima. Restituirà il valore del suo primo argomento.
L'indirizzo del primo carattere la stringa a cui viene aggiunta la seconda stringa.
Quindi restituisci qualcosa, dicendoti dove l'hai effettivamente aggiunto se hai mai avuto bisogno di usarlo.
Quindi ecco un esempio, creiamo una stringa di caratteri della mia stringa
e contiene solo la mia stringa con un terminatore nullo.
Creiamo una stringa di caratteri di input, che è 80, è vuota.
Diciamo di inserire una stringa da concatenare. L'abbiamo letto.
E poi lo concateniamo.
Stampiamo la stringa originale seguita dalla stringa concatenata e quindi l'input.
Quindi, dopo questo, qualunque cosa tu abbia inserito verrà messa
alla fine della mia stringa. Quindi, se inserisci Jason, sarebbe la mia stringa spaziale Jason.
Questo è ciò a cui sarebbe uguale la mia stringa.
Perché ci fai un gatto str.
Per prima cosa stampiamo la stringa e poi la chiamiamo str cat.
L'input sarà effettivamente uguale a qualunque cosa fosse input, la mia
stringa seguita da qualunque cosa fosse input.
Esamineremo questo esempio tra un secondo. Ora, proprio come str
copy, anche str cat ha un strn end cat.
Quindi la versione combinata diventa la nuova prima stringa.
Quindi, proprio come la concatenazione di stringhe con str cat,
c'è un strn cat.
Str cat ha lo stesso problema con la copia str. Può avere un buffer overflow. In realtà non si
assicura che la seconda stringa si adatti al primo array.
Quindi, se non hai abbastanza spazio in quel primo array, puoi incorrere in problemi di overflow del buffer.
Quindi cosa vuoi usare un gatto strn.
Il secondo argomento indica il numero massimo di caratteri da aggiungere.
Quindi, ad esempio, se fai un gatto strn
e due bug di stringhe un componente aggiuntivo, verranno aggiunti solo i primi 13 caratteri del componente aggiuntivo a bug,
dipende da quale viene prima. Se il componente aggiuntivo è inferiore
a 13, verrà aggiunto solo fino a quando non verrà visualizzato il terminatore nullo.
Quindi, in questo esempio, creiamo due stringhe.
Questa è l'origine di questa destinazione. Stiamo facendo un gatto strn.
Alla fine stiamo copiando solo 15
caratteri nella destinazione. Quindi, qualunque sia la dimensione della destinazione, sarà
la dimensione della destinazione più 15 e quindi la stampiamo.
Quindi guardiamo di nuovo questo nei blocchi di codice.
Quindi ecco il nostro esempio e creeremo due array di stringhe
di caratteri, una di 50 e l'altra di 50.
Faremo due copie str per impostarli sui dati.
Questa è la destinazione della fonte. E poi sulla riga 12, facciamo il cat.
E la destinazione sarà ciò a cui ci concateniamo.
Quindi la fonte sarà ciò che concateneremo.
E assegneremo solo 15 caratteri.
Quindi, se la fonte fosse maggiore di 15,
non li copieremmo tutti.
Quindi, quando lo creiamo e
lo eseguiamo, vedrai che ora dice che
questo è il file sorgente o dirà che questa è la
destinazione seguita da questa è la fonte.
Quindi dice che questa è la destinazione, questa è la fonte.
Lo ha concatenato alla fine della destinazione.
Quindi vuoi sempre usare strn cat per la concatenazione, in modo da non avere overflow del buffer.
Parliamo di str compare, che continuo a dire accidentalmente invece
di str copy, str compare.
Quindi, per confrontare le stringhe, dobbiamo usare anche una funzione.
Se vuoi confrontare una stringa con un'altra, non
puoi usare il doppio uguale, che controlla solo i riferimenti se
hai o meno lo stesso indirizzo. Quindi quello che devi usare è str compare.
Questo confronterà il contenuto della stringa.
Non confronta l'array. Quindi può essere utilizzato
per confrontare stringhe memorizzate in array di dimensioni diverse.
Non confronta i caratteri.
È possibile utilizzare argomenti come mele e a tra virgolette doppie, ma non
è possibile utilizzare argomenti carattere come un singolo carattere a.
Questa funzione fa per le stringhe quello che fanno gli operatori relazionali per i numeri.
Quindi la funzione di confronto restituirà
un valore che ti dice se la stringa è uguale o meno, se
è più grande o se è minore di.
Se è uguale, restituirà zero.
Se è minore di, restituirà minore di zero, se str uno
è minore di str due.
E se str due è minore di str uno, restituirà maggiore di zero.
E quindi cosa significa esattamente questo? Bene, lascia che ti
fornisca un esempio di come funziona.
Mettiamolo nei blocchi di codice ed eseguiamolo.
Ma qui stiamo facendo un sacco di confronti str e ti diremo quali sono i valori, se sono
minori o maggiori di perché non è molto chiaro.
Quindi prendiamo questo e guardiamolo nei blocchi di codice.
Quindi ecco il nostro esempio. E stiamo confrontando un mucchio di stringhe e poi stiamo solo
visualizzando i risultati di str compare, sia
che si tratti di uno zero o di qualsiasi altra cosa.
Quindi, se confronti due stringhe a e a, devono essere tra virgolette doppie.
E quello che vedi qui, quello che stiamo facendo è stampare ciò che chiamiamo.
Quindi stiamo
delimitando le virgolette. Mettiamo la barra rovesciata in modo da stampare effettivamente un
carattere di citazione e non termini la stringa. Ma se confrontiamo a e
a, questo dovrebbe restituire zero. Perché zero significa che le stringhe sono uguali.
Se confrontiamo aeb, str compare dovrebbe restituire minore
di.
Perché a è minore di b.
B a dovrebbe restituire un maggiore di zero.
Ma esaminiamo questo aspetto, assicuriamoci di non commettere
errori e lo vedremo effettivamente nell'output.
Quindi, quando eseguiamo questo
e questo ti aiuta a ricordare quali numeri verranno restituiti.
Quindi, quando confronti a e a, ottieni effettivamente 0.
Se confronti aeb, b è minore di
a, quindi è negativo, qualcosa minore di zero,
potrei aver detto il contrario, vedi
anche io li confondo ancora. Perché a è maggiore di b, a
è maggiore di b, negativo.
B è minore di a, quindi ottieni qualcosa di maggiore di zero che è uno.
C è maggiore di a, quindi ne ottieni uno, proprio quando
b era maggiore di a.
E poi stai confrontando maiuscolo e minuscolo.
Quando confronti maiuscolo e minuscolo, fa l'inverso. Z è in realtà
minore di a minuscola.
Quindi il capitale è sempre inferiore al minuscolo.
Se provi a confrontare mele e mele, sarà 1 perché la mela
è inferiore alle mele.
Ed è così che funzionano i confronti. È importante capire che lo 0 è maggiore di
1 o minore di 1. Ancora una volta meno
di zero dirà che la prima stringa è minore della
seconda stringa.
E maggiore di zero sta per dire che la prima stringa è maggiore della seconda stringa.
Questa funzione è molto facile da usare. Non devi preoccuparti di alcun
tipo di confronto tra strn perché non importa la dimensione degli array
che stai confrontando.
La funzione di confronto str confronta le stringhe finché non trova i caratteri corrispondenti che differiscono.
Quindi potrebbe essere fino alla fine di una delle corde.
La funzione Strn compare confronta le stringhe finché non differiscono o finché non
ha confrontato un numero di caratteri specificato dal terzo argomento.
Quindi, in questo caso, non è necessario utilizzare strn
compare per i buffer overflow. Esiste, ma lo useresti solo
se desideri confrontare un certo numero di caratteri.
Viene utilizzato in modo diverso
rispetto alla copia str o alla copia strn o al cat strn.
Il confronto di strn dice solo che voglio solo visualizzare così tanti caratteri.
Quindi sarebbe utile se stai solo cercando un prefisso.
Quindi, se volessi cercare stringhe che iniziano con astro,
potresti limitare la ricerca ai primi cinque caratteri e
useresti strn compare in questo modo.
Quindi in questo esempio si vede che diciamo uguale a zero.
Spesso vedi un'istruzione if come questa quando usi str compare.
Vedi str compare all'interno di questa istruzione ed è uguale a zero per dire che è uguale.
Quindi strn compare usa i primi cinque caratteri,
confronta astro con i primi cinque caratteri dell'astronomia.
Dirà che l'ha trovato. Sarà uguale a zero e dirà l'astronomia trovata.
Se fai la stessa cosa, ma confrontandola con una stringa diversa chiamata
stupefacente, non la troverà, in realtà verrà visualizzata - dirà
che stupire è maggiore di astro. Quindi mostrerà qualcosa di maggiore di
0, che è un 1 e non
mostrerà alcun dato.
Quindi usa str compare quando confronti le stringhe per tutti i contenuti.
Usa strn compare quando vuoi confrontare solo il prefisso con una stringa.
Lo stesso tipo di sintassi o strn confronta solo il terzo argomento.
Quindi abbiamo parlato molto di
alcune funzioni davvero importanti che useremo, principalmente
str length, strn copy, strn cat e strn compare.
Avremo una sfida in cui dovrai utilizzare queste funzioni che ti faranno
familiarizzare con esso.
Ma diventerai davvero familiare con questo perché finirai per
usarli ancora e ancora e ancora. Grazie.