Funzioni per la gestione delle stringhe in C ++




функции strlen (), strcat (), strcpy (), strcmp () в C++

dopo, come ci conosciamo stringhe e array di caratteri in C ++, guardare le funzioni più comuni per lavorare con loro. La lezione sarà completamente costruito in pratica. Vi scrivere i propri programmi-analoghi per il trattamento delle linee e parallelo l'utilizzo di funzioni di libreria standard CString (string.h – nelle versioni più vecchie). Così si sta per presentarsi, come funzionano. Le funzioni della libreria standard CString sono:

  • strlen() – calcola la lunghezza della stringa (numero di caratteri escluso \0);
  • strcat() – Esso combina le stringhe;
  • strcpy() – copia i simboli di una linea all'altra;
  • strcmp() – confronta due stringhe .

E 'certamente non tutte le caratteristiche, solo quelli, che è coperto in articolo.

strlen() (la lunghezza delle parole – lunghezza)

Il nostro programma, che calcola il numero di caratteri per riga:

Per calcolare i caratteri di una stringa di lunghezza indeterminata (l'utente immette essa), abbiamo usato il ciclo mentre – linee 13 – 17. Si passa attraverso tutte le celle della matrice (tutti i caratteri della stringa) alternativamente, partendo da zero. Quando ad un certo ciclo di passo per soddisfare Box ourStr [amountOfSymbol], che memorizza simbolo \0, simboli di pausa del ciclo di busto e aumentare il contatore amountOfSymbol.

Quindi il codice sarà simile, la sostituzione di una sezione di codice in funzione strlen():

Come si può vedere, Questo codice. Non ha bisogno di dichiarare le variabili aggiuntive e utilizzare un ciclo. Il flusso di uscita cout siamo passati nella stringa funzione di – strlen(ourStr). Si suggerisce che la lunghezza della linea e di nuovo al numero di programma. Come nel precedente codice-analogico, simbolo \0 escluso il numero totale di caratteri.

Il risultato è il programma in primo e secondo simile:

функция strlen () в C++

strcat() (concatenamento di parole – composto)

programma, che la fine di una riga, aggiunge la seconda linea. in altre parole – Unisce due linee.

Secondo i commenti nel codice dovrebbe essere tutto chiaro. Qui di seguito, scriviamo un programma per eseguire la stessa azione, ma usando strcat(). In questa funzione, daremo due argomenti (due linee) – strcat(someText1, someText2); . La funzione aggiunge una stringa someText2 alla linea someText1. Allo stesso simbolo ' 0' alla fine someText1 Esso sovrascrive il primo carattere someText2. E aggiunge anche una finale ' 0'

Attuazione della unione di due linee, Utilizzando la funzione standard, Presi una riga di codice nel programma – 14-fila.

risultato:

strcat c++, strcat_s c++

Che cosa dovrebbe prestare attenzione al primo e secondo codice – dimensione del primo carattere dell'array dovrebbe essere sufficiente per la seconda serie di sedi caratteri. Se la dimensione è insufficiente – si può verificare la terminazione anomala del programma, dal momento della registrazione la linea di memoria, che occupa il primo array. per esempio:

In questo caso,, costante strokovaya “Imparare il C ++ c noi!” Esso non può essere scritto nella matrice someText1. Poiché non c'è abbastanza spazio, per tali operazioni.

Se si utilizza una versione recente di ambiente di sviluppo Microsoft Visual Studio, si può verificare il seguente errore:: “errore C4996: 'strcat’: Questa funzione o variabile può essere pericoloso. Considerare l'utilizzo strcat_s anziché. Per disabilitare deprecazione, uso _CRT_SECURE_NO_WARNINGS. Vedere la guida in linea per maggiori dettagli.” Questo perché, che ha sviluppato una nuova versione più sicura della funzione strcat – esso strcat_s. Lei si preoccupa, affinché non vi sia buffer overflow (array di caratteri, che ha prodotto record di seconda linea). Ambiente si prevede di utilizzare una nuova funzione, invece del obsoleto. Ulteriori informazioni su questo può essere sul sito Web MSDN. Questo errore può verificarsi, se si utilizza la funzione strcpy, che sarà discusso sotto.

strcpy() (copia Slovenia – copiatura)

Vendi su di una riga e inserirlo al posto di un'altra riga.

Applicare la libreria di funzioni standard di CString:

Prova a compilare e prima, ed un secondo programma. Si vedrà questo risultato:

strcpy C ++

strcmp() (Slovenia confrontare – confronto)

Questa caratteristica è stata progettata in modo da: Si confronta il carattere di due C-string per carattere. Se le stringhe sono identiche (e simboli e il loro numero) – la funzione restituisce il numero di programma 0. Se la prima riga è più di un secondo – restituisce il numero di programma 1, e se meno, il -1. numero -1 allora, quando la lunghezza delle linee è, ma le linee dei caratteri non corrispondono.

strcmp C ++ programma con strcmp():

strcmp C ++

Condividi sui social network i nostri articoli con i tuoi amici, che ha anche imparare le basi della programmazione in C ++.

Sul nostro sito ha già la possibilità di iscriversi, per ricevere la notifica di nuovi articoli. per iscriversi – inserisci il tuo e-mail qui sotto.

Newsletter nuove lezioni sulla programmazione:

Funzioni per la gestione delle stringhe in C ++
4.5 (90.59%) 17 voti

36 pensieri su "Funzioni per la gestione delle stringhe in C ++

  1. Ciao. hoity-toity, perché quando combinare due righe e la lunghezza della matrice matrice secondo carattere specificato, per esempio

    , poi la seconda matrice non è combinato con il primo?

    1. non è vero.
      Hai il risultato può essere semplicemente collocato in someText1[].
      Aumentare la sua dimensione – quello avido?
      per esempio: someText1[ 200 ]

  2. spiegare, prego, perché nell'esempio associazione con righe
    int = count1 0; // per la cella in cui è memorizzato 'l'indice 0’ prima fila
    mentre (someText1[count1] != 0)
    scriviamo “someText1[count1] != 0” e non “someText1[count1] != ‘ 0′”?
    Ci sembra di essere alla ricerca di un elemento di una fine stringa di caratteri con ' 0'? Che cosa significa lo zero?
    Anche se devo dire, Ho un Koudblokse lavora con lo zero…

    1. Perché il record ' 0’ ancora una volta, e mezzi: byte, valore numerico registrato in cui uguale 0.
      Tali registrazioni sono equivalenti.

  3. La coppia non può capire
    char xsmibol[2] = {wParam, ‘ 0’};
    Funziona in questo modo
    ————————–
    E questo non sta funzionando:
    char xsmibol[2];
    xsmibol = {wParam, ‘ 0’};

    parla 17 27 C:\Users 1 Documents main1.cpp [avvertimento] liste di inizializzazione esteso solo con -std = c ++ 11 o = -STD GNU ++ 11
    17 12 C:\Users 1 Documents main1.cpp [Errore] assegnare ad una matrice da una lista di inizializzazione
    37 14 C:\Users 1 Documents main1.cpp [Errore] atteso primaria espressione prima ‘)’ gettone

    Che cosa sto facendo di sbagliato ?

    1. credo che, Nel primo caso – char xsmibol[2] = {wParam, ‘ 0’}; il compilatore calcola la dimensione della stringa e sostituisce un posto 2. Nel secondo caso -char xsmibol[2];
      xsmibol = {wParam, ‘ 0’}; egli non può fissare la dimensione della stringa.

    2. Perché la matrice è consentito inizializzazione un elenco di valori ({…,…}), ma non ammessi assegnazione. Questa regole di sintassi C ++, e non dipende tipo elementi dell'array – se si tratta di un array di char (linee), o un array di int, galleggiante matrice, etc..

      P.S. Questa limitazione è in parte ridotta in C ++ standard 11 (2011città), ma è necessario specificare le opzioni di compilazione.

  4. buon pomeriggio. Io studio le lezioni e le attività.
    Ma notato una discrepanza nei risultati della funzione strcmp.
    Nel caso che il numero di caratteri in due righe , ma le differenze tra questi personaggi risultano 1 o -1 dipende dalla sequenza in cui questi simboli. Se la prima riga contiene i simboli , sono in ordine alfabetico che la seconda linea del risultato 1, se al contrario il risultato -1. per esempio: confronto di stringhe “asdf” e “BSDF”darà 1, un confronto di stringhe “BSDF” e “asdf” darà -1. E anche con i numeri. “1234” e “2234” darà 1, e “2234” e “1234” darà -1.

      1. del tutto naturale – operazione di confronto non è commutativa, non consente la permutazione di operandi. Lo stesso vale per i valori numerici e confrontandole (questo è comprensibile): 2 > 1 – è vero, ma 1 > 2 – è falso.

  5. Ciao!
    dire, prego, perché, nell'esempio di combinare due linee con cicli, ci indicherà la dimensione della prima matrice di stringhe?:

    char someText1[64] = “Сайт purecodecpp.com!”;
    char someText2[] = “Imparare il C ++ c noi!”;

    E se si lascia una dimensione vuota, permettendo il compilatore di calcolare questo valore indipendentemente, il testo unico viene visualizzato dopo la compilazione nella console, più alcuni caratteri casuali(completamente casuale), quindi viene visualizzata la finestra di errore:

    (per esempio, in questo caso, Si aggiunge un punto interrogativo:
    someText1: Сайт purecodecpp.com!Imparare il C ++ c noi!?
    invece di – someText1: Сайт purecodecpp.com!Imparare il C ++ c noi!

    1. A causa di puntamento someText1[64] voi rezerviruete per linea 64 byte di memoria, anche se la linea viene scritto nel "purecodecpp.com Sito!”, limitata ' 0', Ci vuole molto meno byte (strlen(someText1)).
      E quando si scrive someText1[], calcola compilatore e riserve per questa linea non lo fa 64 byte, e appena sufficiente, come necessario per accogliere la stringa specificata + carattere di fine ' 0'.

      Non appena si tenta di eseguire aggiungendo someText2 in coda someText1, nel 1 ° caso fino avviene qui in quelli 64 byte riservati. E nel secondo caso, si inizia subito a scrivere confine Memoria allocata per someText1, e il risultato sarà imprevedibile – esso ruvido errore.

  6. Ciao, Ho riscritto il codice del programma del vostro primo, lanciato – provare… Le scrivo per controllare una parola, per verificare se la risposta corretta darà, e così, parola: “estate”, Si compone di 4 caratteri, per iscritto non utilizzato non gli spazi, senza virgolette, Solo la lettera… e risultati del programma:
    “fila “estate” È costituita da 8 personaggi!”
    …8-me? perché? :) non è 4 simboli? Analogamente, con le due parole:
    “mattina d'estate”
    “fila “mattina d'estate” È costituita da 17 personaggi!”
    ogni lettera, considerato come il compilatore 2 simboli, divario – 1 simbolo. Ma ogni carattere deve essere contato come 1… ?

Lascia un Commento

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *