Advertisement
Panuozzo77

StringBlender

Dec 9th, 2021 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. /*
  6. Scrivere un programma che alloca dinamicamente la dimensione di 2 stringhe, genera una terza stringa che è l'unione delle 2 stringhe
  7. in questo modo:    input: CIAO - BALLARE  output: CBIAALOLARE
  8. */
  9.  
  10. int main()
  11. {
  12.     char str1[15], str2[15], *p1, *p2, *p3;
  13.     int len1, len2, k=0, posizione=0;
  14.     printf("Inserisci prima parola: ");
  15.     fgets(str1, 15, stdin); //fgets è stronzo, aggiunge dopo '\n', anche '\0'  quindi se scrivi "ciao" ti fa "ciao\n\0"
  16.     printf("Inserisci seconda parola: ");
  17.     fgets(str2, 15, stdin);
  18.     len1 = strlen(str1);    //strlen include nella lunghezza tutto, fino a quando non raggiunge '\0', ESCLUSO se stesso.
  19.     len2 = strlen(str2);
  20.    
  21.     printf("len1 = %d \nlen2= %d \n", len1, len2);  //Non serve nel codice, è per verificare il valore
  22.    
  23.     //Alloco dinamicamente 3 puntatori char per ospitare le parole
  24.     p1 = malloc(sizeof(char)*len1);
  25.     p2 = malloc(sizeof(char)*len2);
  26.     p3 = malloc(sizeof(char)*((len1-1) + (len2-1) + 1));
  27.  
  28.     //copio il contenuto delle stringhe nei rispettivi puntatori
  29.     strcpy(p1, str1);  
  30.     strcpy(p2, str2);
  31.  
  32.  
  33. //Questa cosa funziona tipo: quando arrivi al primo Newline tra le 2, finisci di copiare.
  34.     for(int i=0 ; *(p1+i)!='\n' && *(p2+i)!='\n' ; i++)
  35.     {
  36.         *(p3+k)=*(p1+i);
  37.         k++;
  38.         *(p3+k)=*(p2+i);
  39.         k++;
  40.         posizione++;
  41.     }
  42.    
  43.     printf("posizione: %d \nk: %d\n", posizione, k); //Non serve nel codice, è per verificare il valore
  44.    
  45.     //Se la lunghezza si è fermata qui, significa che ha copiato tutto str1. Quindi rimane str2 da aggiungere
  46.     //faccio -1 perché se scrivi "ciao" l'array parte da 0, arriva in posizione 4 col ciclo precedente. strlen("ciao") sarebbe 5
  47.     if(posizione=len1-1)
  48.     {
  49.         for(int j=posizione; j<len2; j++)
  50.         {
  51.             *(p3+k)=*(p2+j);
  52.             k++;
  53.         }
  54.         *(p3+k)='\0';   //inserisco il terminatore di striga
  55.     }
  56.    
  57.     //Se la lunghezza si è fermata qui, significa che ha copiato tutto str2. Quindi rimane str1 da aggiungere
  58.     if(posizione=len2-1)
  59.     {
  60.         for(int j=posizione; j<len1; j++)
  61.         {
  62.             *(p3+k)=*(p1+j);
  63.             k++;
  64.         }
  65.        *(p3+k)='\0';    //inserisco il terminatore di stringa
  66.     }
  67.    
  68.     else *(p3+k)='\0';  //se non entra negli altri 2 cicli, significa che ha completato tutto, inserisco il terminatore di stringa
  69.    
  70.     //Output stringa finale
  71.     printf("%s", p3);
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement