Advertisement
etf2018

zadaca4z1

Jan 22nd, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. #include <stdio.h>
  2. char* ubacibroj(char *pok, int broj) {
  3. /* Funkcija koja ubacuje broj u string (ovo NIJE funkcija koja se trazi u zadatku) */
  4. int temp, brojac=0, negativanBroj=0;
  5. char *pok2;
  6. if (broj<0) {
  7. broj*=-1;
  8. brojac++; /* Brojac broji koliko ce se novih elemenata ubaciti u string */
  9. negativanBroj=1; /*Logicka varijabla koja ce u slucaju potrebe staviti - ispred broja u stringu, ako je on negativan */
  10. }
  11. temp=broj;
  12. do {
  13. temp/=10;
  14. brojac++;
  15. } while (temp); /* Temp varijabla preuzima vrijednost broja i broji njegove cifre */
  16.  
  17. pok2=pok;
  18. while (*pok2)
  19. pok2++; /* Pomjera pomocni pokazivac na kraj stringa */
  20. *(pok2+brojac)='\0'; /*Pomjera kraj stringa za broj novih elemenata */
  21. pok2--;
  22. while (pok2>=pok) {
  23. *(pok2+brojac)=*pok2; /* Pomjera sve elemente za broj novih elemenata */
  24. pok2--;
  25. }
  26. pok2+=brojac; /* Pomjera pokazivac za broj novih elemenata, da bi se mogao broj normalno pretvoriti u string */
  27. do {
  28. *pok2--=broj%10+'0';
  29. broj/=10;
  30. } while(broj); /* Ubacivanje broja u string */
  31. if (negativanBroj) {
  32. *pok2='-';
  33. pok2--;
  34. }
  35. pok2+=brojac+1; /*Pomjeramo pokazivac da pokazuje na element iza broja, da bi funkcija ubaci_broj mogla normalno nastaviti sa radom */
  36. return pok2;
  37. }
  38. int prebrojirijeci(char* niz) {
  39. /* Blago modificirana funkcija prebrojavanja rijeci TUT 10 ZAD 4 (modificirana za novu definiciju rijeci) */
  40. int brojac, brojrijeci=0;
  41. while (*niz) {
  42. brojac=0;
  43. while (*niz!=' ' && *niz!='\n' && *niz!='\t' && *niz!='\0') {
  44. brojac++;
  45. niz++;
  46. }
  47. if (brojac) {
  48. brojrijeci++;
  49. niz--;
  50. }
  51. niz++;
  52. }
  53. return brojrijeci;
  54. }
  55. void ubacirazmak(char* niz) {
  56. /* Ovu funkciju koristimo u slucaju da se izmedju dvije rijeci nalazi samo jedan razmak */
  57. char *pokNaKraj;
  58. pokNaKraj=niz;
  59. while (*pokNaKraj) {
  60. pokNaKraj++; /*Pomjeramo pokazivac na kraj niza */
  61. }
  62. *(pokNaKraj+1)='\0';
  63. while (pokNaKraj>niz) {
  64. *pokNaKraj=*(pokNaKraj-1); /*Pomjeramo sve elemente za jedno mjesto */
  65. pokNaKraj--;
  66. }
  67. /* Nema potrebe da stavimo *pokNakraj=' ', jer ce se svejedno u funkciji ubaci_broj slati u ovu funkciju pokazivac na razmak, tako da ce posljednji prekopirani element biti razmak */
  68. }
  69. char* ubaci_broj(char* tekst, int broj) {
  70. int brojrijeci=prebrojirijeci(tekst);
  71. int brojubacivanja=0;
  72. char* returnPok=tekst;
  73. while (*tekst==' ' || *tekst=='\n' || *tekst=='\t')
  74. tekst++; /* Pomjeramo pokazivac do prve rijeci */
  75. while (brojubacivanja<brojrijeci-1) {
  76. while (*tekst!=' ' && *tekst!='\n' && *tekst!='\t') {
  77. tekst++; /* Pomjeramo pokazivac na prvi razmak izmedju dvije rijeci */
  78. }
  79. if (*(tekst+1)!=' ')
  80. ubacirazmak(tekst); /* U slucaju da se izmedju dvije rijeci nalazi samo jedan razmak, pozivamo funkciju ubacirazmak */
  81. tekst++;
  82. tekst=ubacibroj(tekst, broj); /* Prvo pomjeramo pokazivac na drugi razmak, jer po uslovu zadatka treba da se ostavi jedan razmak izmedju kraja rijeci i broja, pa onda pozivamo funkciju ubacibroj */
  83. brojubacivanja++;
  84. while (*tekst==' ' || *tekst=='\n' || *tekst=='\t')
  85. tekst++; /* Pomjeramo pokazivac na sljedecu rijec */
  86. }
  87. return returnPok;
  88. }
  89. int main() {
  90. char niz[100]={"Sta ja znam et"};
  91. printf("%s", ubaci_broj(niz, -123));
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement