Stringhe in C ++, e array di caratteri





строки в С++

Con le linee stiamo lavorando in quasi tutti del nostro programma e per questa lezione. Più in particolare, con le costanti stringa – una sequenza di caratteri tra doppi apici. Spesso abbiamo dovuto visualizzare determinate informazioni. per esempio:

строки в С++

Testo tra virgolette è una costante stringa. Le virgolette sono utilizzati per determinare l'inizio e la fine di una stringa costante, e non è spesso.

Molto spesso è necessario non solo per stampare alcuni messaggi di testo durante il programma, ma anche di lavorare con un determinato testo, riporlo da qualche parte, fare riferimento ad esso e modificare, necessariamente. Per costanti stringa, discusso sopra, Non siamo in grado di applicare il programma, per esempio, sovrascrivere (non sappiamo il suo nome o l'indirizzo nella memoria). Ora potrete conoscere uno dei modi per lavorare con le stringhe in C ++. Più avanti impareremo di più con un modo – utilizzando classe corda.

Quindi la prima: in C ++ viene usato per memorizzare matrici stringhe di caratteri. Questa è la stessa array, come tu ed io abbiamo già parlato nell'articolo su array in C ++, ma non memorizzano i dati numerici, e carattere. Potete immaginare i personaggi della serie in serie in celle di memoria adiacenti – in ogni cellula immagazzina un simbolo ed occupa un byte. Un byte perché, che ciascun elemento è un array di caratteri carro тип. L'ultimo carattere di ogni simbolo è una linea \0 (carattere null). per esempio:

строки в С++, символьные массивы в С++

il testo, incluso lo spazio, Si compone di 11 caratteri. Se l'ultima cella è tale . (punto), non carattere null \0 – il compilatore non è la linea. E il lavoro avrebbe dovuto essere con questo set di caratteri, come con una serie regolare – scrivere a ciascuna cella separatamente e mostrato carattere per carattere (utilizzando il ciclo):

строки в С++, символьные массивы в С++

Fortunatamente, C ++ ha un modo molto più conveniente per inizializzare e accedere ai vettori di caratteri – fila. Per fare questo, l'ultimo carattere della matrice deve essere un carattere nullo \0. È lui che fa l'insieme di una stringa di caratteri, lavoro che, molto più facile, che con un array di caratteri.

stringa dichiarata così – Creiamo un tipo array carbonizzare, Dimensioni tra parentesi quadre è opzionale (calcola il compilatore), operatore = e tra virgolette doppie scrivere il testo desiderato. Cioè, si inizializza un array di stringa costante:

Prescrivere il carattere nullo non è necessario. È presente implicitamente e questo viene aggiunto a ogni stringa costante automaticamente. così, nonostante il fatto che noi vediamo 11 caratteri per riga, dimensione dell'array sarà 12, da \0 anche un simbolo e occupa un byte di memoria. Prende l'ultima cella della matrice di caratteri. Come si può vedere, per uscita stringa, abbastanza per fare riferimento ad esso per nome: cout << str << endl; cout Si visualizzerà un carattere per carattere, fino ad incontrare in una delle celle della matrice di nuova riga \0 e l'uscita viene interrotta. Tale appello alla matrice carattere ordinario (array senza \0) inaccettabile. Poiché il compilatore per visualizzare caratteri sullo schermo, anche uscire dall'ambito della matrice, mentre lui non aveva incontrato un certo simbolo cella di memoria \0. Si può cercare di sostituire nel primo esempio, anziché l'operatore ciclo cout << str << endl; e vedere, ciò che accade. Ho trovato in questo modo:

строки в С++, символьные массивы в С++

Voglio attirare la vostra attenzione alla differenza tra una costante carattere (tra apici – 'F', '@' ) da una costante stringa (tra virgolette "f", "@" ). per la prima, C ++ è assegnato un byte per la memorizzazione nella memoria. Per simbolo registrato tra virgolette, due byte di memoria saranno assegnate – per la maggior parte personaggi e lo zero (aggiunto dal compilatore).

Che cosa succede se la linea richiederà all'utente con la tastiera? In questo caso, è necessario dichiarare schieramento carbonizzare indicando la sua grandezza sufficiente per memorizzare il carattere di input, compresi \0. Non dimenticate che un carattere null. Se avete bisogno di memorizzare 3 carattere nell'array, la sua dimensione dovrebbe essere uno in più – cioè 4.

строки в С++, символьные массивы в С++

Utilizzando citazioni inizializzazione vuoto, assegniamo un valore ad ogni elemento della matrice \0. Così stringa espunti “spazzatura” altri programmi. Anche se l'utente immette un nome che contiene meno caratteri, dopo il nome è un simbolo \0. Questo permetterà di evitare errori inutili. In ricordo di questa linea sarebbe simile a questa:

строки в С++, символьные массивы в С++

a proposito, se assumiamo sovrascrivere la cella 11-esima dell'array – str[11] = ' 0';

строки в С++, символьные массивы в С++

e una serie di visualizzazione su schermo, vediamo solo purecodecpp nonostante il fatto, nelle cellule 12, 13, 14 sono stati immagazzinati simboli. carattere null giocherà un ruolo importante nel portare sullo schermo e tutto, che è dietro di esso non verrà mostrato.

Parlare di mettere stringhe particolare della tastiera. Il fatto, che ci sono alcuni problemi di essere a conoscenza e che deve imparare a risolvere. Il seguente programma quando entrano le linee non sono tutti sarà così liscio, come vogliamo:

строки в С++, символьные массивы в С++

Non preoccupatevi fino over, quella voce via gin productionodit neobhodimo Latina. Informazioni su come introdurre correttamente l'alfabeto cirillico sarà discusso in un articolo separato. Qui potete vedere, che la citazione abbiamo introdotto, ma quando è dimostrato, Vediamo solo la prima parola. Questo è, che non si può entrare in un carattere null dalla tastiera, e gin divario percepito, newline e tab, come la fine della linea. Cioè, in questo caso, gin Ho letto solo la prima parola, una virgola e ha aggiunto automaticamente segnare la fine della linea. Il resto delle voci inserito nella coda di ingresso.

Questo problema è risolto semplicemente. In C ++, esistono funzioni ottenere() e getline() , che possiamo usare con gin. assomigliano, ma più spesso viene utilizzato getline(). In questo articolo, non prenderà in considerazione la differenza tra loro. Compila il nostro input programma getline ():

строки в С++, символьные массивы в С++

che si vede, tra parentesi specifichiamo due argomenti a funzioni – in quello che è considerato una matrice simbolo (nome di matrice) e la dimensione della matrice – fila 11. Il risultato ci si adatta – tutto visualizzare la corretta. Cidargaetline() Si legge in un array di tutta la linea compresi gli spazi e tabulazioni, fino ad una pressa entrare o finché le dimensioni della matrice viene superata. carattere di nuova riga nella matrice non verrà salvato, ed è sostituito da un carattere nullo.

In C ++, la gestione delle funzioni stringa, ci sono molti, che discuteremo nel prossimo articolo. In esso, si parla di caratteristiche, che permette di sovrascrivere fila, unirli, confrontati tra loro, etc..

Oltre alla lettura, è auspicabile per vedere il video tutorial. Linee 7 minuti:

Condividi i nostri articoli con i tuoi amici sui social network – questa è la migliore grazie. E se avete domande e suggerimenti – lasciare commenti.

Newsletter nuove lezioni sulla programmazione:

Stringhe in C ++, e array di caratteri
4.8 (96.67%) 6 voti

18 pensieri su "Stringhe in C ++, e array di caratteri

  1. Ho una domanda. Come può ciclo I attraverso una serie, per trovare in essa un simbolo, e di aggiungere accanto ad essa è la stessa. Ad esempio l'utente immette D:\myfolder e l'uscita dovrebbe essere D:\\la mia cartella\

    1. Guarda il video. C'è inf, se scelti per una serie di autori definizione del formato di allineamento[], cioè la funzione sizeof, con l'aiuto di un gatto può essere in per scorrere tutti gli elementi. per ( int i = 0; io<taglia di(schieramento); i ++). Raggiungere l'inserto desiderato e. credo che, così.

      1. Questo non è vero:
        1. taglia di() ritorna esigenze di spazio un array di byte, per 10 elemento di matrice char lo farà 10, e per la stessa matrice int lo farà 40.
        2. dimensione della matrice può essere definito come sizeof( schieramento ) / taglia di( schieramento[ 0 ] ). ma questo – Solo nel dominio della matrice (di trasferirlo da qualche parte nella funzione).
        3. La matrice non può essere “inserire” membro, possibile solo se il pezzo spinta tutti i turni successivi su 1 destra, ma è troppo costoso.
        4. stringa В, in contrasto con la matrice, inserire l'elemento può essere.

  2. buon pomeriggio. Così ho capito la domanda, che la linea dovrebbe aggiungere carattere. (argomento lezione perché la linea)

  3. perché qualcosa non funziona. Lang primo studente scrive alla variabile, e il nome del secondo non ha nemmeno entrare (salta immediatamente al № gruppo)
    sollecito, Io non lo faccio)

    1. Il fatto, che dopo l'inserimento dei dati nella struttura perno ultimo campo[io].palla[j] simbolo rimane nel cin stream ' n'. Era il suo metodo e legge getline(), senza sospendere il programma, attesa di input.
      È necessario aggiungere cin.get() l'ultima squadra nel ciclo esterno.

      Dmitry Belik

  4. Trovare il prodotto di un numero pari e il minimo, componente neko-
    Thoroe un numero X come risolvere questo problema?

    1. prima di tutto, nella vostra formulazione del problema non è corretto!
      Che cosa significa “numero di componenti”? In matematica, non esiste il concetto sostavlyayushey.

      come si, per esempio,, immaginare come dovrebbe apparire come una soluzione per un particolare valore di X, diciamo, X = 113? scrivere.

      1. quindi visualizzare, v'è anche un numero minimo nell'introduzione del numero

  5. sollecito, Non capisco il motivo per cui saltato seconda richiesto di inserire le parole?

    La console viene visualizzato il seguente:

    Inserisci alcune parole : parola
    parola
    char predefinito è: e
    Inserire il nuovo char: w
    Il nuovo simbolo: w
    Questo è tutto!!!
    2 Inserisci alcune parole :
    3 Inserisci alcune parole : parola
    parola
    Premere un tasto per continuare . . .

    1. in qualche modo (Dettagli stessi il debug):

Lascia un Commento

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