next up previous contents index
Next: Funzioni di confronto Up: Funzioni di libreria sulle Previous: Funzioni di libreria sulle   Indice   Indice analitico

Funzioni di copia e concatenazione

Le prime funzioni che incontriamo sono le seguenti
int strlen (const char* s)
char* strcpy (char* dest, const char* sorg)
char* strncpy (char* dest, const char* sorg, int n)
char* strcat (char* dest, const char* sorg)
char* strncat (char* dest, const char* sorg, int n)
La funzione strlen (STRing LENght) ritorna il numero di caratteri contenuti in una stringa, escluso il carattere '\0'; essa è del tutto equivalente alla funzione lunghezza dell'esempio ex6_5_4.

Le funzioni strcpy (STRing CoPY) e strncpy (STRing N-CoPY) hanno entrambe il medesimo compito di copiare la stringa sorg (la quale, si noti, è costante, non essendo soggetta a modifiche all'interno della funzione) nella stringa dest. La seconda delle due permette inoltre di copiare esattamente n caratteri da sorg; per curiosità si sappia che, nel caso n sia maggiore della lunghezza di sorg, nella stringa dest oltre a tutti i caratteri di sorg, vengono copiati tanti caratteri '\0' quanti bastano per raggiungere n.


// ex6_6_1.cpp
#include <iostream.h>
#include <string.h>
void main() {
  char nome[50];
  cout << "qual e` il tuo nome? ";
  cin >> nome;
  char s[50];
  strcpy(s, nome);
  cout << "dunque ti chiami " << s << "\n";
  char t[4];
  strncpy(t, nome, 3);
  t[3] = '\0';   // carattere di fine stringa
  cout << "e le prime tre lettere "
    "del tuo nome sono " << t << "\n";
}

esempio di output:
qual e` il tuo nome? Superman
dunque ti chiami Superman
e le prime tre lettere del tuo nome sono Sup

Si noti bene che nel caso si copi l'intera stringa (strcpy) allora viene copiato anche il carattere di fine stringa '\0'; se invece la copia riguarda solo i primi n caratteri di una stringa (strncpy) allora non viene inserito nessun carattere di fine stringa, e dobbiamo effettuare tale operazione ``manualmente'', come nell'esempio precedente.

Le funzioni strcat (STRing conCATenation) e strncat (STRing N-conCATenation) servono entrambe a concatenare la stringa sorg alla stringa dest, solo che la seconda di esse estrae solo i primi n caratteri da sorg; al contrario di strncpy, strncat inserisce sempre un carattere di terminazione stringa a sorg. Il valore di ritorno di entrambe le funzioni è un puntatore alla stringa dest.


// ex6_6_2.cpp
#include <iostream.h>
#include <string.h>
void main() {
  char nome[50], cognome[50];
  cout << "nome   ? "; cin >> nome;
  cout << "cognome? "; cin >> cognome;
  // inserisce uno spazio dopo il nome
  strcat (nome, " ");
  // concatena le due stringhe e salva
  // il risultato in tot
  char* tot = strcat (nome, cognome);
  cout << "nome completo: " << tot << "\n";
}

esempio di output:
nome ? Mario
cognome? Rossi
nome completo: Mario Rossi


next up previous contents index
Next: Funzioni di confronto Up: Funzioni di libreria sulle Previous: Funzioni di libreria sulle   Indice   Indice analitico
Claudio Cicconetti
2000-09-06