Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //questo programma fa inserire due stringhe all'utente, dopo di che chiede all'utente se:
- //vuole copiare la prima stringa sulla seconda
- //oppure, vuole mettere la seconda stringa subito dopo la prima
- //oppure, vuole conoscere la dimensione delle due stringhe che verrà stampata se in memoria c'è abbastana spazio per contenerle.
- #include<stdio.h>
- #include<stdlib.h>
- #define CHARS_MAX 1000 //massima lunghezza che può avere una stringa
- typedef char* pchar;
- //funzione già fatta in classe che chiede la conferma della risposta all'utente
- int risposta(void)
- {
- char str[CHARS_MAX];
- int ok=0; //0 è falso, quindi ok falso. In questo caso il ciclo viene eseguito almeno una volta, si può fare anche con il do-while
- while (!ok)
- {
- ok=1;
- printf("Si o No/Yes or Not?: ");
- scanf("%s",str);
- switch (str[0]) //vai a vedere il primo carattere che è stato digitato
- { case 's':
- case 'S':
- case 'Y':
- printf("Hai scritto si,quindi eseguo l'istruzione corrispondente alla tua scelta\n");
- return 1;
- break;
- case 'n':
- case 'N':
- printf("Hai scritto no, ritenta.\n");
- return 0;
- break;
- default:
- printf("sbagliato ritenta!\n");
- ok=0; // se sbagliamo a premere tasto il programma continua fin quando non diamo la risposta giusta, ripetendo nuovamente il ciclo. Altrimenti se la risposta è giusta, il ciclo si blocca essendo la variabile ok=1, mentre l'iterazione viene eseguita solo fin quando è falso, ovvero 0.
- break;
- }
- }
- }
- //funzione che copierà la stringa t nella stringa s
- void copia_stringa(pchar s, pchar t)
- {
- while ((*s=*t)!='\0')
- {
- s++;
- t++;
- }
- }
- //funzione che concatena la stringa t alla stringa s
- char s[CHARS_MAX],t[CHARS_MAX];
- void concatena_stringa (char s[]; char t[];)
- {
- int i,j;
- i=j=0;
- while (s[i]!='\0') //trova la fine di s
- i++;
- while ((s[i++]=t[j++])!='\0');
- }
- //funzione che calcola il numero di caratteri di una stringa
- int lunghezza_s(pchar s)
- {
- int n;
- pchar pcaratteri;
- for(n=0; *s!='\0'; s++)
- n++;
- return n;
- pcaratteri=(pchar)malloc(n); //ometto sizeof(char) perchè è inutile moltiplicare per uno
- if (pcaratteri==NULL)
- { printf("non c'è sufficiente spazio in memoria\n");
- return EXIT_FAILURE ;
- }
- }
- //inizia il nostro programma
- int main(void)
- {
- char s1[CHARS_MAX],s2[CHARS_MAX],scelta[CHARS_MAX];
- int sceltaperswitch,r;
- pchar s,t;
- printf("inserisci la prima stringa\n");
- scanf("%s",s1);
- printf("inserisci la seconda stringa\n");
- scanf("%s",s2);
- s=s1;
- t=s2;
- while (!r) //finchè la risposta non sarà affermativa (1)
- {
- printf("Cosa vuoi fare?\n Premi 1 se vuoi copiare la seconda stringa sulla prima\n Premi 2 se vuoi concatenare la seconda stringa alla prima\n Premi 3 se vuoi conoscere la dimensione della prima stringa\n Premi 4 se vuoi conoscere la dimensione della seconda stringa\n");
- scanf("%s",scelta);
- sceltaperswitch=atoi(scelta);
- printf("Hai digitato %d?\n",sceltaperswitch);
- r=risposta();
- }
- switch(sceltaperswitch)
- {
- case 1:
- {
- copia_stringa(s,t);
- //non è detto che tutta la seconda stringa entri nella prima, mal che vada, ne copierà solo il pezzo che entra
- printf("Adesso questa sarà la prima stringa: %s\n",s1);
- }
- break;
- case 2:
- {
- concatena_stringa (s1[CHARS_MAX],s2[CHARS_MAX]);
- printf("Le due stringhe consecutive saranno: %s\n",s1);
- }
- break;
- case 3:
- printf("Numero caratteri prima stringa:%d\n",lunghezza_s(s));
- break;
- case 4:
- printf("Numero caratteri seconda stringa:%d\n",lunghezza_s(t));
- break;
- default:
- printf("Errore\n");
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment