Advertisement
KvArt

Nizovi stringova

Jul 12th, 2022
638
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.94 KB | None | 0 0
  1. /*• Sastaviti program na jeziku C za učitavanje imena
  2. gradova uz njihovo uređivanje po abecednom
  3. redosledu (leksikografskom poretku) i ispisivanje
  4. rezultata. U svakom redu se učitava po jedno ime
  5. sve dok se ne učita prazan red. Za rad sa
  6. stringovima koristiti prethodno realizovane
  7. funkcije.
  8. • Rešenje zadatka prikazuje rad sa nizom
  9. pokazivača na znakovne nizove (stringove)
  10. • Sortiranje se vrši nakon svakog dodavanja novog
  11. stringa u niz
  12. • Umesto da se vrši prepisivanje stringova (strcpy),
  13. vrši se izmena vrednosti pokazivača
  14. • Po sličnom principu kao kod formiranja dinamičke
  15. matrice, može se formirati i dinamički niz
  16. stringova
  17. – alocira se niz pokazivača koji će pokazivati na pojedinačne stringove
  18. (kao za vrste matrice)
  19. – za svaki string se alocira onoliko prostora koliko je potrebno za
  20. smeštanje svih znakova i završnog znaka
  21. – za razliku od matrica gde je svaka vrsta imala isti broj elemenata, sada
  22. se alocira samo onoliko prostora koliko je potrebno za smeštanje
  23. konkretnog stringa*/
  24.  
  25. #include <stdio.h>
  26. #include <stdlib.h>
  27. #include <string.h>
  28. #define CHUNK 10
  29. char* readCity() {
  30. char *city = NULL, c;
  31. int cnt = 0;
  32. while((c = getchar()) != '\n') {
  33. if(cnt % CHUNK == 0) {
  34. city = realloc(city,
  35. sizeof(*city) * (cnt + CHUNK));
  36. if(!city) {
  37. perror(NULL); exit(1);
  38. }
  39. }
  40. city[cnt++] = c;
  41. }
  42. if(!cnt) return NULL;
  43. city = realloc(city, sizeof(*city) * (cnt + 1));
  44. if(!city) {
  45. perror(NULL);
  46. exit(1);
  47. }
  48. city[cnt] = '\0';
  49. return city;
  50. }
  51. int main(void) {
  52. char **cities = NULL, *city;
  53. int cnt = 0;
  54. while(1) {
  55. city = readCity();
  56. if(!city)
  57. break;
  58. if(cnt % CHUNK == 0) {
  59. cities = realloc(cities,
  60. sizeof(*cities) * (cnt + CHUNK));
  61. if(!city) {
  62. perror(NULL); exit(1);
  63. }
  64. }
  65. int i;
  66. for(i = cnt-1; i >= 0 &&
  67. strcmp(cities[i], city) > 0; i--){
  68. cities[i+1] = cities[i];
  69. }
  70. cities[i+1] = city;
  71. cnt++;
  72. }
  73. for(int i=0; i<cnt; i++) {
  74. printf("%s\n", cities[i]);
  75. free(cities[i]);
  76. }
  77. free(cities);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement