Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*************************************************************************
- * *
- * Exercise 1.21 - Write a Program entab that replaces strings of blanks *
- * by the minimum number of tabs and blanks to achieve the same spacing. *
- * *
- ************************************************************************/
- #include <stdio.h>
- #define TABSIZE 8 /* TABSTOPy su od seba TABSIZE daleko */
- int main(void) {
- int medzier, kurzor, c; /* premenne pre: pocet nacitanych medzier, poziciu voci TABSTOP, nacitany znak */
- while((c = getchar()) != EOF) {
- if (c == ' ') { /* sme medzera? */
- for (; c == ' '; ++medzier) /* ano, tak nacitavajme dalsie, kym nacitame ne-medzeru. Ratajme pocet medzier */
- c = getchar();
- if (medzier < (TABSIZE - kurzor)) { /* mame menej medzier, nez je vzdialenost k dalsiemu TABSTOPu? */
- for (; medzier > 0; medzier--) { /* ano, tak proste vytlacme prislusny pocet medzier */
- putchar(' ');
- kurzor++;
- }
- }
- else { /* mame viac medzier, nez je vzdialenost k dalsiemu TABSTOPu? */
- while(kurzor < TABSIZE) { /* najprv sa posunme k dalsiemu TABSTOPu, v 'kurzor' je pocet krokov k nemu, co sme uz spravili */
- putchar(' '); /* kroky k tabstopu vyplnime medzerami */
- ++kurzor; /* aktualizujeme kurzor ako sa pohybujeme */
- --medzier; /* zmensujeme pocet medzier, ktore este mame nepouzite */
- }
- for (kurzor = (medzier / TABSIZE); kurzor > 0; kurzor--) /* kolko celych TABSTOPov mame vo zvysnom pocte medzier? */
- putchar('\t'); /* tolkokrat vytlacime '\t' */
- for (kurzor = (medzier % TABSIZE); kurzor > 0; kurzor--) /* kolko medzier nam ostane po vyuziti celych TABSTOPov? */
- putchar(' '); /* tolko medzier vytlacime */
- kurzor = (medzier % TABSIZE); /* aktualizujeme kurzor na aktualnu vzdialenost */
- medzier = 0; /* minuli sme vsetky medzery, tak to zaznacime */
- }
- putchar(c); /* vytlacime aj prvy znak, co sme nacitali po poslednej medzere */
- ++kurzor;
- }
- else { /* sme cokolvek okrem medzery */
- if (c == '\n' || c == '\t') /* sme novy riadok alebo posunuli sme sa za dalsi TABSTOP? */
- kurzor = 0; /* ano, tak kurzor nastavime na nulovu vzdialenost od predchadzajuceho TABSTOPu*/
- else { /* nie, tak posunieme kurzor a skontrolujeme, ci sme sa nedostali za dalsi TABSTOP */
- kurzor++;
- if(kurzor >= TABSIZE)
- kurzor=0; /* presli sme za dalsi TABSTOP, tak vzdialenost voci nemu nastavime na nulu */
- }
- putchar(c); /* vytlacime ne-medzeru */
- }
- }
- return 0; /* slusne sa rozlucime */
- }
Add Comment
Please, Sign In to add comment