Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- /*
- Scrivere un programma che alloca dinamicamente la dimensione di 2 stringhe, genera una terza stringa che è l'unione delle 2 stringhe
- in questo modo: input: CIAO - BALLARE output: CBIAALOLARE
- */
- int main()
- {
- char str1[15], str2[15], *p1, *p2, *p3;
- int len1, len2, k=0, posizione=0;
- printf("Inserisci prima parola: ");
- fgets(str1, 15, stdin); //fgets è stronzo, aggiunge dopo '\n', anche '\0' quindi se scrivi "ciao" ti fa "ciao\n\0"
- printf("Inserisci seconda parola: ");
- fgets(str2, 15, stdin);
- len1 = strlen(str1); //strlen include nella lunghezza tutto, fino a quando non raggiunge '\0', ESCLUSO se stesso.
- len2 = strlen(str2);
- printf("len1 = %d \nlen2= %d \n", len1, len2); //Non serve nel codice, è per verificare il valore
- //Alloco dinamicamente 3 puntatori char per ospitare le parole
- p1 = malloc(sizeof(char)*len1);
- p2 = malloc(sizeof(char)*len2);
- p3 = malloc(sizeof(char)*((len1-1) + (len2-1) + 1));
- //copio il contenuto delle stringhe nei rispettivi puntatori
- strcpy(p1, str1);
- strcpy(p2, str2);
- //Questa cosa funziona tipo: quando arrivi al primo Newline tra le 2, finisci di copiare.
- for(int i=0 ; *(p1+i)!='\n' && *(p2+i)!='\n' ; i++)
- {
- *(p3+k)=*(p1+i);
- k++;
- *(p3+k)=*(p2+i);
- k++;
- posizione++;
- }
- printf("posizione: %d \nk: %d\n", posizione, k); //Non serve nel codice, è per verificare il valore
- //Se la lunghezza si è fermata qui, significa che ha copiato tutto str1. Quindi rimane str2 da aggiungere
- //faccio -1 perché se scrivi "ciao" l'array parte da 0, arriva in posizione 4 col ciclo precedente. strlen("ciao") sarebbe 5
- if(posizione=len1-1)
- {
- for(int j=posizione; j<len2; j++)
- {
- *(p3+k)=*(p2+j);
- k++;
- }
- *(p3+k)='\0'; //inserisco il terminatore di striga
- }
- //Se la lunghezza si è fermata qui, significa che ha copiato tutto str2. Quindi rimane str1 da aggiungere
- if(posizione=len2-1)
- {
- for(int j=posizione; j<len1; j++)
- {
- *(p3+k)=*(p1+j);
- k++;
- }
- *(p3+k)='\0'; //inserisco il terminatore di stringa
- }
- else *(p3+k)='\0'; //se non entra negli altri 2 cicli, significa che ha completato tutto, inserisco il terminatore di stringa
- //Output stringa finale
- printf("%s", p3);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement