/* my_strcat.cpp  // *** equivalente alla funzione strcat definita in <cstring> *** //

   Scrivere una funzione my_strcat(...), che riceve in ingresso 
   una stringa destinazione ed una sorgente, e che modifica la 
   stringa destinazione concatenandovi la stringa sorgente. 
   Esempio: Nel caso in cui la stringa destinazione e quella 
   sorgente abbiano i seguenti valori:
      dest = "123"
      sorg = "45678"
   dopo la chiamata della funzione la stringa destinazione deve 
   contenere "12345678". Si assuma che la stringa destinazione 
   sia stata correttamente allocata dal chiamante della dimensione 
   opportuna a contenere la stringa finale. Per realizzare la 
   funzione my_strcat(...) è possibile utilizzare la funzione di 
   libreria strlen(...), ma non (ovviamente) la strcat(...).

   Scrivere un programma che definisce una stringa destinazione 
   pari a "Fondamenti di ", una stringa sorgente pari a 
   "Programmazione", chiama la funzione my_strcat(...) e stampa a 
   video il nuovo valore della stringa destinazione.

************************************/

#include <iostream>
#include <cstring>   // inclusione necessaria per poter utilizzare la funzione strlen(...), strcpy(...), ecc...
using namespace std;

void my_strcat(char *d, const char *s){
    int i = 0;
    while ( d[i] != '\0' )
        i++;
    int j;
    for ( j = 0; j < strlen(s); j++)
        d[i+j] = s[j];
    d[i+j] = '\0';
}

/* versione ottimizzata, che evita la chiamata a strlen()
void my_strcat2(char *d, const char *s){
    int i = 0;
    while ( d[i] != '\0' )
        i++;
    int j = 0;
    while (s[j] != '\0')
        d[i+j++] = s[j];
    d[i+j] = '\0';
}
*/


int main(){

  const int MAXLEN = 100;
  char dest[MAXLEN + 1]; // prealloco un vettore di 101 caratteri, per poter accogliere una C-Stringa di al piu' 100 caratteri

  strcpy(dest, "Fondamenti di ");  // inizializzo la stringa di destinazione
  char sorg[] = "Programmazione";  // inizializzo la stringa di sorgente

  cout<<"Contenuto C-stringa dest prima della concatenazione: \""<<dest<<'"'<<endl;
  cout<<"Contenuto C-stringa sorg: \""<<sorg<<'"'<<endl;
  
  my_strcat(dest, sorg);
  cout<<"Il nuovo contenuto della C-Stringa dest, dopo la concatenazione, e': \""<<dest<<'"'<<endl;  
  
  return 0;  
  
}