elelomb

stringhe

Apr 27th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. //questo programma fa inserire due stringhe all'utente, dopo di che chiede all'utente se:
  2. //vuole copiare la prima stringa sulla seconda
  3. //oppure, vuole mettere la seconda stringa subito dopo la prima
  4. //oppure, vuole conoscere la dimensione delle due stringhe che verrà stampata se in memoria c'è abbastana spazio per contenerle.
  5.  
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8.  
  9. #define CHARS_MAX 1000 //massima lunghezza che può avere una stringa
  10.  
  11. typedef char* pchar;
  12. //funzione già fatta in classe che chiede la conferma della risposta all'utente
  13. int risposta(void)
  14. {
  15. char str[CHARS_MAX];
  16. 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
  17.  
  18. while (!ok)
  19. {
  20. ok=1;
  21. printf("Si o No/Yes or Not?: ");
  22. scanf("%s",str);
  23. switch (str[0]) //vai a vedere il primo carattere che è stato digitato
  24. { case 's':
  25. case 'S':
  26. case 'Y':
  27. printf("Hai scritto si,quindi eseguo l'istruzione corrispondente alla tua scelta\n");
  28. return 1;
  29. break;
  30.  
  31. case 'n':
  32. case 'N':
  33. printf("Hai scritto no, ritenta.\n");
  34. return 0;
  35. break;
  36.  
  37. default:
  38. printf("sbagliato ritenta!\n");
  39. 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.
  40. break;
  41. }
  42. }
  43. }
  44.  
  45.  
  46. //funzione che copierà la stringa t nella stringa s
  47. void copia_stringa(pchar s, pchar t)
  48. {
  49. while ((*s=*t)!='\0')
  50. {
  51. s++;
  52. t++;
  53. }
  54. }
  55.  
  56.  
  57. //funzione che concatena la stringa t alla stringa s
  58. char s[CHARS_MAX],t[CHARS_MAX];
  59. void concatena_stringa (char s[]; char t[];)
  60. {
  61. int i,j;
  62. i=j=0;
  63. while (s[i]!='\0') //trova la fine di s
  64. i++;
  65. while ((s[i++]=t[j++])!='\0');
  66. }
  67.  
  68.  
  69. //funzione che calcola il numero di caratteri di una stringa
  70. int lunghezza_s(pchar s)
  71.  
  72. {
  73. int n;
  74. pchar pcaratteri;
  75. for(n=0; *s!='\0'; s++)
  76. n++;
  77. return n;
  78. pcaratteri=(pchar)malloc(n); //ometto sizeof(char) perchè è inutile moltiplicare per uno
  79. if (pcaratteri==NULL)
  80. { printf("non c'è sufficiente spazio in memoria\n");
  81. return EXIT_FAILURE ;
  82. }
  83. }
  84.  
  85. //inizia il nostro programma
  86. int main(void)
  87. {
  88.  
  89. char s1[CHARS_MAX],s2[CHARS_MAX],scelta[CHARS_MAX];
  90. int sceltaperswitch,r;
  91. pchar s,t;
  92.  
  93. printf("inserisci la prima stringa\n");
  94. scanf("%s",s1);
  95.  
  96. printf("inserisci la seconda stringa\n");
  97. scanf("%s",s2);
  98.  
  99. s=s1;
  100. t=s2;
  101.  
  102. while (!r) //finchè la risposta non sarà affermativa (1)
  103. {
  104.  
  105. 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");
  106. scanf("%s",scelta);
  107. sceltaperswitch=atoi(scelta);
  108. printf("Hai digitato %d?\n",sceltaperswitch);
  109. r=risposta();
  110. }
  111.  
  112. switch(sceltaperswitch)
  113. {
  114. case 1:
  115. {
  116. copia_stringa(s,t);
  117. //non è detto che tutta la seconda stringa entri nella prima, mal che vada, ne copierà solo il pezzo che entra
  118. printf("Adesso questa sarà la prima stringa: %s\n",s1);
  119. }
  120. break;
  121. case 2:
  122. {
  123. concatena_stringa (s1[CHARS_MAX],s2[CHARS_MAX]);
  124. printf("Le due stringhe consecutive saranno: %s\n",s1);
  125. }
  126. break;
  127. case 3:
  128. printf("Numero caratteri prima stringa:%d\n",lunghezza_s(s));
  129. break;
  130. case 4:
  131. printf("Numero caratteri seconda stringa:%d\n",lunghezza_s(t));
  132. break;
  133.  
  134. default:
  135. printf("Errore\n");
  136. break;
  137. }
  138.  
  139. }
Advertisement
Add Comment
Please, Sign In to add comment