elelomb

stringhe

Apr 27th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.92 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 e verificare se c'è sufficente spazio in memoria 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. int n;
  73. for(n=0; *s!='\0'; s++)
  74. n++;
  75. return n;
  76. }
  77.  
  78.  
  79. //inizia il nostro programma
  80. int main(void)
  81. {
  82.  
  83. char s1[CHARS_MAX],s2[CHARS_MAX],scelta[CHARS_MAX];
  84. int sceltaperswitch,r;
  85. pchar s,t;
  86.  
  87. printf("inserisci la prima stringa\n");
  88. scanf("%s",s1);
  89.  
  90. printf("inserisci la seconda stringa\n");
  91. scanf("%s",s2);
  92.  
  93. s=s1;
  94. t=s2;
  95.  
  96. while(!r) //finchè la risposta non sarà affermativa (1)
  97. {
  98.  
  99. 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");
  100. scanf("%s",scelta);
  101. sceltaperswitch=atoi(scelta);
  102. printf("Hai digitato %d?\n",sceltaperswitch);
  103. r=risposta();
  104. }
  105.  
  106. switch(sceltaperswitch)
  107. {
  108. case 1:
  109. {
  110. copia_stringa(s,t);
  111. //non è detto che tutta la seconda stringa entri nella prima, mal che vada, ne copierà solo il pezzo che entra
  112. printf("Adesso questa sarà la prima stringa: %s\n",s1);
  113. }
  114. break;
  115. case 2:
  116. {
  117. concatena_stringa (s1[CHARS_MAX],s2[CHARS_MAX]);
  118. printf("Le due stringhe consecutive saranno: %s\n",s1);
  119. }
  120. break;
  121. case 3:
  122. printf("Lunghezza 1° stringa:%d\n",lunghezza_s(s));
  123. break;
  124. case 4:
  125. printf("Lunghezza 2° stringa:%d\n",lunghezza_s(t));
  126. break;
  127.  
  128. default:
  129. printf("Sbagliato\n");
  130. break;
  131. }
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment