Advertisement
KvArt

Konkatenacija dinamickih nizova

Jul 10th, 2022
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. /*Napisati program na programskom jeziku C koji
  2. učitava dva znakovna niza, izvrši nadovezivanje
  3. drugog na prvi, okrene "naopako" dobijeni niz i
  4. ispiše ga na standardnom izlaznom uređaju.*/
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. void main() {
  9. int n;
  10. char c, *d, *p, *prvi, *drugi;
  11. printf("Maksimalna duzina: ");
  12. scanf("%d\n", &n);
  13. p = calloc(2*n+1, sizeof(char)) ;
  14. d = calloc(n+1, sizeof(char));
  15. if ((NULL == d) || (NULL == p))
  16. printf("Nije moguca alokacija!\n");
  17. else {
  18. prvi = p; drugi = d;
  19. while ((*p = getchar()) != ‘\n’) p++;
  20. *p = ‘\0’;
  21. while ((*d = getchar()) != ‘\n’) d++;
  22. *d = ‘\0’;
  23. p = prvi; d = drugi;
  24. /* konkatenacija */
  25. while (*p) p++;
  26. while (*p++=*d++);
  27. /* okretanje */
  28. p = prvi;
  29. for (d=p+(strlen(p)-1); p < d; p++, d--)
  30. c=*p, *p=*d, *d=c;
  31. printf(“%s\n”, prvi);
  32. free(prvi); free(drugi);
  33. }
  34. }
  35.  
  36. /*komentar
  37. • Za string p se alocira dvostruko više memorije
  38. zbog nadovezivanja stringova
  39. – alocira se 2n+1 elemenata niza, jer je potrebno alocirati i jedan dodatni
  40. element za terminalni simbol
  41. • Učitavanje stringova se vrši znak po znak,
  42. korišćenjem bibliotečke funkcije getchar(), sve
  43. dok se ne učita znak za kraj reda ‘\n’
  44. • Obrtanje dobijenog stringa se vrši poznatim
  45. algoritmom, ali se vodi računa da se ne pomeri
  46. završni znak
  47. Samu konkatenaciju (nadovezivanje) stringova je moguće
  48. izvršiti pomoću bibliotečke funkcije strcat(t,s) koja
  49. nadovezuje string s na string t uz ispravno postavljanje
  50. završnog znaka
  51. • Deo koda:
  52. while (*p) p++;
  53. while (*p++=*d++);
  54. – prva petlja pomera pokazivač p tako da ukazuje na mesto završnog znaka prvog
  55. stringa
  56. – druga petlja prepisuje sadržaj drugog stringa na kraj prvog, uz prepisivanje
  57. završnog znaka, kada se ciklus zaustavlja
  58. • bi trebalo zameniti sa pozivom:
  59. strcat(p,d);
  60. • Takođe, petlju while (*p++=*d++) u gornjem bloku je
  61. moguće zameniti pozivom funkcije strcpy(t,s) koja kopira
  62. sadržaj stringa na koji ukazuje pokazivač s na mesto u
  63. memoriji na koje ukazuje pokazivač t:
  64. strcpy(p,d);
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement