InnadrilCastle

Untitled

Jan 12th, 2022 (edited)
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.19 KB | None | 0 0
  1. /*************************************************************************
  2.  *                                                                       *
  3.  * Exercise 1.21 - Write a Program entab that replaces strings of blanks *
  4.  * by the minimum number of tabs and blanks to achieve the same spacing. *
  5.  *                                                                       *
  6.  ************************************************************************/
  7.  
  8. #include <stdio.h>
  9.  
  10. #define TABSIZE 8                       /* TABSTOPy su od seba TABSIZE daleko */
  11.  
  12. int main(void) {
  13.         int medzier, kurzor, c;         /* premenne pre: pocet nacitanych medzier, poziciu voci TABSTOP, nacitany znak */
  14.  
  15.         while((c = getchar()) != EOF) {
  16.                 if (c == ' ') {                                         /* sme medzera? */
  17.                         for (; c == ' '; ++medzier)                     /* ano, tak nacitavajme dalsie, kym nacitame ne-medzeru. Ratajme pocet medzier */
  18.                                 c = getchar();
  19.  
  20.                         if (medzier < (TABSIZE - kurzor)) {             /* mame menej medzier, nez je vzdialenost k dalsiemu TABSTOPu? */
  21.                                 for (; medzier > 0; medzier--) {        /* ano, tak proste vytlacme prislusny pocet medzier */
  22.                                         putchar(' ');
  23.                                         kurzor++;
  24.                                 }
  25.                         }
  26.                         else {                                          /* mame viac medzier, nez je vzdialenost k dalsiemu TABSTOPu? */
  27.                                 while(kurzor < TABSIZE) {               /* najprv sa posunme k dalsiemu TABSTOPu, v 'kurzor' je pocet krokov k nemu, co sme uz spravili */
  28.                                         putchar(' ');                   /* kroky k tabstopu vyplnime medzerami */
  29.                                         ++kurzor;                       /* aktualizujeme kurzor ako sa pohybujeme */
  30.                                         --medzier;                      /* zmensujeme pocet medzier, ktore este mame nepouzite */
  31.                                 }
  32.                                 for (kurzor = (medzier / TABSIZE); kurzor > 0; kurzor--)        /* kolko celych TABSTOPov mame vo zvysnom pocte medzier? */
  33.                                         putchar('\t');                                          /* tolkokrat vytlacime '\t' */
  34.                                 for (kurzor = (medzier % TABSIZE); kurzor > 0; kurzor--)        /* kolko medzier nam ostane po vyuziti celych TABSTOPov? */
  35.                                         putchar(' ');                                           /* tolko medzier vytlacime */
  36.  
  37.                                 kurzor = (medzier % TABSIZE);           /* aktualizujeme kurzor na aktualnu vzdialenost */
  38.                                 medzier = 0;                            /* minuli sme vsetky medzery, tak to zaznacime */
  39.                         }
  40.                         putchar(c);                                     /* vytlacime aj prvy znak, co sme nacitali po poslednej medzere */
  41.                         ++kurzor;
  42.                 }
  43.                 else {                                                  /* sme cokolvek okrem medzery */
  44.                         if (c == '\n' || c == '\t')                     /* sme novy riadok alebo posunuli sme sa za dalsi TABSTOP? */
  45.                                 kurzor = 0;                             /* ano, tak kurzor nastavime na nulovu vzdialenost od predchadzajuceho TABSTOPu*/
  46.                         else {                                          /* nie, tak posunieme kurzor a skontrolujeme, ci sme sa nedostali za dalsi TABSTOP */
  47.                                 kurzor++;
  48.                                 if(kurzor >= TABSIZE)
  49.                                         kurzor=0;                       /* presli sme za dalsi TABSTOP, tak vzdialenost voci nemu nastavime na nulu */
  50.                         }
  51.                         putchar(c);                                     /* vytlacime ne-medzeru */
  52.                 }
  53.         }
  54.         return 0;                                                       /* slusne sa rozlucime */
  55. }
  56.  
Add Comment
Please, Sign In to add comment